2026年腾讯技术面试攻略编程题解析.docxVIP

  • 0
  • 0
  • 约6.32千字
  • 约 18页
  • 2026-03-02 发布于福建
  • 举报

第PAGE页共NUMPAGES页

2026年腾讯技术面试攻略:编程题解析

一、算法设计题(共3题,每题15分)

1.题目:

给定一个无重复元素的整数数组`nums`,返回所有可能的子集(幂集)。

示例:

输入:`nums=[1,2,3]`

输出:`[[],[1],[1,2],[1,2,3],[1,3],[2],[2,3],[3]]`

答案与解析:

python

defsubsets(nums):

res=[[]]

fornuminnums:

res+=[curr+[num]forcurrinres]

returnres

解析:

采用回溯法,每次迭代将当前数字添加到所有已有子集中,生成新的子集并加入结果。时间复杂度`O(2^n)`,空间复杂度`O(2^n)`。

2.题目:

设计一个LRU(LeastRecentlyUsed)缓存,支持`get`和`put`操作。`get(key)`返回键对应的值,若不存在返回-1;`put(key,value)`插入或更新键值对,当缓存容量满时,删除最久未使用的键。

示例:

LRUCachecapacity=2

put(1,1)//缓存是{1:1}

put(2,2)//缓存是{1:1,2:2}

get(1)//返回1

put(3,3)//去除键2,缓存是{1:1,3:3}

get(2)//返回-1(未找到)

答案与解析:

使用双向链表+哈希表实现。哈希表记录键到节点的映射,双向链表维护访问顺序,头节点为最近访问,尾节点为最久未使用。

python

classDLinkedNode:

def__init__(self,key=0,value=0):

self.key=key

self.value=value

self.prev=None

self.next=None

classLRUCache:

def__init__(self,capacity:int):

self.capacity=capacity

self.cache={}

self.head,self.tail=DLinkedNode(),DLinkedNode()

self.head.next=self.tail

self.tail.prev=self.head

defget(self,key:int)-int:

ifkeynotinself.cache:

return-1

node=self.cache[key]

self._move_to_head(node)

returnnode.value

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

ifkeyinself.cache:

node=self.cache[key]

node.value=value

self._move_to_head(node)

else:

newNode=DLinkedNode(key,value)

self.cache[key]=newNode

self._add_node(newNode)

iflen(self.cache)self.capacity:

tail=self._pop_tail()

delself.cache[tail.key]

def_move_to_head(self,node):

self._remove_node(node)

self._add_node(node)

def_add_node(self,node):

node.prev=self.head

node.next=self.head.next

self.head.next.prev=node

self.head.next=node

def_remove_node(self,node):

prev=node.prev

next=node.next

prev.next=next

next.prev=prev

def_pop_tail(self):

res=self.tail.prev

self._remove_node(res)

returnres

解析:

LRU的核心在于高效更新访问顺序。双向链表实现`O(1)`的节点移动,哈希表实现`O(1)`的键查找。

3.题目:

给定一个二叉树,判断其是否是平衡二叉树(左右子树高度差不超过1,且左右子树均为平衡树)。

示例:

输入:[3,9,20,null,null,15,7]

输出:True

答案与解析:

文档评论(0)

1亿VIP精品文档

相关文档