腾讯软件开发岗位面试题目详解.docxVIP

  • 0
  • 0
  • 约8.14千字
  • 约 23页
  • 2026-01-30 发布于福建
  • 举报

第PAGE页共NUMPAGES页

2026年腾讯软件开发岗位面试题目详解

一、编程能力(5题,每题20分,共100分)

1.题目:

实现一个函数,输入一个正整数`n`,返回`n`的所有真因子的和(不包括`n`本身)。例如,输入`12`,返回`1+2+3+4+6=16`。

要求:

-时间复杂度不超过O(√n)。

-编写代码时需注明语言(如Java、C++或Python)。

答案:

python

defsum_of_divisors(n):

ifn=1:

return0

total=0

foriinrange(1,int(n0.5)+1):

ifn%i==0:

total+=i

ifi!=n//iandi!=1:

total+=n//i

returntotal

示例

print(sum_of_divisors(12))#输出:16

解析:

-真因子是能整除`n`的数,不包括`n`本身。

-为何时间复杂度是O(√n)?因为`i`从1到√n,若`i`是因子,则`n//i`也是因子,需避免重复计算`n`本身。

-特殊处理:若`n`是完全平方数(如`16`),`√n`会被重复计算一次,需减去。

2.题目:

给定一个包含重复元素的数组`nums`,返回所有不重复的全排列。例如,输入`[1,1,2]`,返回`[[1,1,2],[1,2,1],[2,1,1]]`。

要求:

-不能使用库函数,需手动实现回溯算法。

-考虑重复元素的去重逻辑。

答案:

python

defpermute_unique(nums):

defbacktrack(path,used,res):

iflen(path)==len(nums):

res.append(path.copy())

return

foriinrange(len(nums)):

ifused[i]:

continue

跳过重复元素

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

continue

used[i]=True

path.append(nums[i])

backtrack(path,used,res)

path.pop()

used[i]=False

nums.sort()#先排序,便于跳过重复

res=[]

used=[False]len(nums)

backtrack([],used,res)

returnres

示例

print(permute_unique([1,1,2]))#输出:[[1,1,2],[1,2,1],[2,1,1]]

解析:

-排序后,相同元素相邻,便于通过`i0andnums[i]==nums[i-1]andnotused[i-1]`跳过重复排列。

-`used`数组记录已选择的元素,避免重复使用。

-回溯时需撤销选择(`path.pop()`和`used[i]=False`)。

3.题目:

设计一个LRU(LeastRecentlyUsed)缓存,支持`get`和`put`操作。缓存容量为`capacity`。

要求:

-`get(key)`返回键对应的值,若不存在返回`-1`。

-`put(key,value)`插入或更新键值对,若超出容量则删除最久未使用的键。

-使用链表和哈希表实现,时间复杂度为O(1)。

答案:

python

classListNode:

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=ListNode()

self.tail=ListNode()

self.head.next=self.tail

self.tail.prev=self.head

def_add_node(self,node):

node.prev=self.head

node.next=self.head.next

self.head.next.prev=node

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档