腾讯研发工程师面试要点与答案.docxVIP

  • 0
  • 0
  • 约1.09万字
  • 约 30页
  • 2026-02-06 发布于福建
  • 举报

第PAGE页共NUMPAGES页

2026年腾讯研发工程师面试要点与答案

一、编程基础与数据结构(15题,共45分)

1.(3分)输出数组`[1,2,3,4,5]`的所有子集,用列表表示。

答案:

python

defsubsets(nums):

res=[[]]

fornuminnums:

res+=[curr+[num]forcurrinres]

returnres

print(subsets([1,2,3,4,5]))

解析:使用回溯法生成所有子集,初始结果包含空集,每次添加新元素时扩展已有子集。

2.(4分)判断一个链表是否为回文链表,不使用额外空间。

答案:

python

classListNode:

def__init__(self,val=0,next=None):

self.val=val

self.next=next

defisPalindrome(head):

ifnothead:

returnTrue

slow=fast=head

whilefastandfast.next:

slow=slow.next

fast=fast.next.next

prev=None

whileslow:

temp=slow.next

slow.next=prev

prev=slow

slow=temp

left,right=head,prev

whileright:

ifleft.val!=right.val:

returnFalse

left=left.next

right=right.next

returnTrue

解析:快慢指针找到中点,反转后半部分,然后逐个比较左右部分是否相同。

3.(5分)给定一个无重复元素的数组,找出所有和为`target`的三元组。

答案:

python

defthreeSum(nums,target):

nums.sort()

res=[]

foriinrange(len(nums)-2):

ifi0andnums[i]==nums[i-1]:

continue

left,right=i+1,len(nums)-1

whileleftright:

total=nums[i]+nums[left]+nums[right]

iftotal==target:

res.append([nums[i],nums[left],nums[right]])

left+=1

right-=1

whileleftrightandnums[left]==nums[left-1]:

left+=1

whileleftrightandnums[right]==nums[right+1]:

right-=1

eliftotaltarget:

left+=1

else:

right-=1

returnres

解析:排序后使用双指针,固定第一个数,然后用左指针和右指针滑动寻找和为`target`的组合。

4.(4分)实现一个LRU缓存,支持`get`和`put`操作。

答案:

python

classLRUCache:

def__init__(self,capacity:int):

self.capacity=capacity

self.cache=OrderedDict()

defget(self,key:int)-int:

ifkeynotinself.cache:

return-1

self.cache.move_to_end(key)

returnself.cache[key]

defput(self,key:int,value:int)-None:

ifkeyinself.cache:

self.cache.move_to_end(key)

self.cache[key]=value

iflen(self.cache)self.capacity:

self.cache.popitem(last=False)

解析:使用`OrderedDict`维护访问顺序,`get`时移动元素到末尾,`put`时先删除超出容量的元素。

5.(5分)二叉树的最大深度是多少?

答案:

python

defmaxDepth(root):

ifnotroot:

return0

return1+ma

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档