2026年美团技术面试全攻略及问题解答.docxVIP

  • 0
  • 0
  • 约5.65千字
  • 约 18页
  • 2026-01-13 发布于福建
  • 举报

2026年美团技术面试全攻略及问题解答.docx

第PAGE页共NUMPAGES页

2026年美团技术面试全攻略及问题解答

一、编程基础(5题,每题10分,共50分)

1.题目:

请实现一个函数,输入一个正整数`n`,返回`n`的二进制表示中`1`的个数。例如,输入`11`,输出`3`(因为`11`的二进制表示为`1011`)。

答案:

cpp

intcountBits(intn){

intcount=0;

while(n){

count+=n1;

n=1;

}

returncount;

}

解析:

通过位运算`n1`获取最低位的`0`或`1`,然后右移一位继续统计。时间复杂度为O(logn)。

2.题目:

请实现一个函数,输入一个字符串`s`,返回`s`的最长回文子串的长度。例如,输入`babad`,输出`3`(因为`bab`或`aba`是最长回文子串)。

答案:

cpp

intlongestPalindrome(strings){

if(s.empty())return0;

intn=s.size();

vectorvectorbooldp(n,vectorbool(n,false));

intmaxLen=1;

for(inti=n-1;i=0;i--){

for(intj=i;jn;j++){

if(s[i]==s[j](j-i=2||dp[i+1][j-1])){

dp[i][j]=true;

maxLen=max(maxLen,j-i+1);

}

}

}

returnmaxLen;

}

解析:

动态规划方法,`dp[i][j]`表示`s[i..j]`是否为回文。时间复杂度为O(n2)。

3.题目:

请实现一个函数,输入一个链表的头节点`head`,返回其反转后的头节点。例如,输入`1-2-3`,输出`3-2-1`。

答案:

cpp

ListNodereverseList(ListNodehead){

ListNodeprev=nullptr;

ListNodecurr=head;

while(curr){

ListNodenext=curr-next;

curr-next=prev;

prev=curr;

curr=next;

}

returnprev;

}

解析:

迭代反转链表,时间复杂度为O(n)。

4.题目:

请实现一个函数,输入一个数组`nums`,返回其中和为`target`的两个数的下标。例如,输入`nums=[2,7,11,15]`,`target=9`,输出`[0,1]`(因为`2+7=9`)。

答案:

cpp

vectorinttwoSum(vectorintnums,inttarget){

unordered_mapint,intmap;

for(inti=0;inums.size();i++){

intcomplement=target-nums[i];

if(map.find(complement)!=map.end()){

return{map[complement],i};

}

map[nums[i]]=i;

}

return{};

}

解析:

哈希表记录数字及其下标,时间复杂度为O(n)。

5.题目:

请实现一个函数,输入一个正整数`n`,返回`n`的阶乘的字符串表示。例如,输入`10`,输出`3628800`。

答案:

cpp

stringfactorial(intn){

if(n==0)return1;

stringresult=1;

for(inti=2;i=n;i++){

result=multiply(result,to_string(i));

}

returnresult;

}

stringmultiply(stringa,stringb){

intm=a.size(),n=b.size();

vectorintc(m+n,0);

for(inti=m-1;i=0;i--){

for(intj=n-1;j=0;j--){

c[i+j+1]+=(a[i]-0)(b[j]-0);

c[i+j]+=c[i+j+1]/10;

c[i+j+1]%=10

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档