- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
第PAGE页共NUMPAGES页
2026年腾讯技术面试全解析与答案参考
编程能力测试(共5题,每题20分)
1.编程题:字符串反转
题目:编写一个函数,将输入的字符串反转,不使用额外的字符串变量。
示例:输入`hello`,输出`olleh`。
要求:时间复杂度为O(n),空间复杂度为O(1)。
答案:
cpp
stringreverseString(strings){
intleft=0,right=s.size()-1;
while(leftright){
swap(s[left],s[right]);
left++;
right--;
}
returns;
}
解析:通过双指针法从字符串两端交换字符,直到中间相遇,实现反转。时间复杂度为O(n),空间复杂度为O(1)。
2.编程题:合并两个有序数组
题目:给定两个已排序的数组`nums1`和`nums2`,合并成一个有序数组,合并后的数组存放在`nums1`中(`nums1`有足够的空间容纳所有元素)。
示例:输入`nums1=[1,2,3,0,0,0]`,`nums2=[2,5,6]`,输出`[1,2,2,3,5,6]`。
要求:不使用额外空间,原地合并。
答案:
cpp
voidmerge(vectorintnums1,intm,vectorintnums2,intn){
intp1=m-1,p2=n-1,p=m+n-1;
while(p1=0p2=0){
nums1[p--]=(nums1[p1]nums2[p2])?nums1[p1--]:nums2[p2--];
}
while(p2=0){
nums1[p--]=nums2[p2--];
}
}
解析:从后往前合并,比较`nums1`和`nums2`的当前最大值,填入`nums1`的末尾,逐步移动指针。不使用额外空间,时间复杂度为O(m+n)。
3.编程题:二叉树的最大深度
题目:给定一个二叉树,返回其最大深度(即,最长的从根到叶子的路径上的节点数)。
示例:
cpp
structTreeNode{
intval;
TreeNodeleft;
TreeNoderight;
};
要求:使用递归或迭代方法。
答案:
cpp
intmaxDepth(TreeNoderoot){
if(!root)return0;
return1+max(maxDepth(root-left),maxDepth(root-right));
}
解析:递归计算左子树和右子树的最大深度,取较大值加1。时间复杂度为O(n),空间复杂度为O(h)(h为树的高度)。
4.编程题:滑动窗口最大值
题目:给定一个数组和一个窗口大小`k`,返回每次窗口移动后的最大值。
示例:输入`nums=[1,3,-1,-3,5,3,6,7]`,`k=3`,输出`[3,3,5,5,6,7]`。
要求:使用单调队列优化。
答案:
cpp
vectorintmaxSlidingWindow(vectorintnums,intk){
dequeintdq;
vectorintres;
for(inti=0;inums.size();++i){
while(!dq.empty()nums[i]=nums[dq.back()]){
dq.pop_back();
}
dq.push_back(i);
if(dq.front()=i-k){
dq.pop_front();
}
if(i=k-1){
res.push_back(nums[dq.front()]);
}
}
returnres;
}
解析:使用单调递减队列,维护窗口内最大值的索引,每次移动窗口时更新队列。时间复杂度为O(n),空间复杂度为O(k)。
5.编程题:最长回文子串
题目:给定一个字符串,返回其最长回文子串的长度。
示例:输入`babad`,输出`3`(bab或aba)。
要求:使用动态规划或中心扩展法。
答案:
cpp
intlongestPalindrome(strings){
if(s.empty())return0;
intstart=0,end=0;
for(inti=0;is.size();++i){
intlen1=expandAroundCenter(s,i,i);
intlen2=expandAroundCenter(s,i,i+1);
intlen
原创力文档


文档评论(0)