- 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)