腾讯技术面试官必问题及答案.docxVIP

  • 0
  • 0
  • 约6.58千字
  • 约 21页
  • 2026-03-09 发布于福建
  • 举报

第PAGE页共NUMPAGES页

2026年腾讯技术面试官必问题及答案

一、编程基础(5题,每题2分)

1.题目:

请编写一个函数,实现快速排序算法,并说明其时间复杂度和空间复杂度。

答案:

cpp

includevector

includeiostream

voidquickSort(std::vectorintarr,intleft,intright){

if(left=right)return;

intpivot=arr[left];

inti=left,j=right;

while(ij){

while(ijarr[j]=pivot)j--;

arr[i]=arr[j];

while(ijarr[i]=pivot)i++;

arr[j]=arr[i];

}

arr[i]=pivot;

quickSort(arr,left,i-1);

quickSort(arr,i+1,right);

}

intmain(){

std::vectorintarr={5,3,8,4,2};

quickSort(arr,0,arr.size()-1);

for(intnum:arr)std::coutnum;

return0;

}

解析:

快速排序的平均时间复杂度为O(nlogn),最坏情况为O(n2),空间复杂度为O(logn)(递归栈空间)。腾讯面试中常考察排序算法,快速排序因其高效性被频繁提问。

2.题目:

请实现一个链表反转函数,并说明其时间复杂度和空间复杂度。

答案:

cpp

includeiostream

structListNode{

intval;

ListNodenext;

ListNode(intx):val(x),next(nullptr){}

};

ListNodereverseList(ListNodehead){

ListNodeprev=nullptr;

ListNodecurr=head;

while(curr){

ListNodenext=curr-next;

curr-next=prev;

prev=curr;

curr=next;

}

returnprev;

}

intmain(){

ListNodehead=newListNode(1);

head-next=newListNode(2);

head-next-next=newListNode(3);

ListNodenewHead=reverseList(head);

while(newHead){

std::coutnewHead-val;

newHead=newHead-next;

}

return0;

}

解析:

链表反转的时间复杂度为O(n),空间复杂度为O(1)。腾讯面试中链表操作是高频考点,需熟练掌握。

3.题目:

请编写一个函数,实现二叉树的层序遍历(广度优先遍历)。

答案:

cpp

includeiostream

includevector

includequeue

structTreeNode{

intval;

TreeNodeleft;

TreeNoderight;

TreeNode(intx):val(x),left(nullptr),right(nullptr){}

};

std::vectorstd::vectorintlevelOrder(TreeNoderoot){

std::vectorstd::vectorintresult;

if(!root)returnresult;

std::queueTreeNodeq;

q.push(root);

while(!q.empty()){

intsize=q.size();

std::vectorintlevel;

for(inti=0;isize;++i){

TreeNodenode=q.front();q.pop();

level.push_back(node-val);

if(node-left)q.push(node-left);

if(node-right)q.push(node-right);

}

result.push_back(level);

}

returnresult;

}

intmain(){

TreeNoderoot=newTreeNode(3);

root-

文档评论(0)

1亿VIP精品文档

相关文档