腾讯算法工程师面试题目与解题思路.docxVIP

  • 0
  • 0
  • 约4.59千字
  • 约 14页
  • 2026-01-26 发布于福建
  • 举报

腾讯算法工程师面试题目与解题思路.docx

第PAGE页共NUMPAGES页

2026年腾讯算法工程师面试题目与解题思路

第一部分:编程能力测试(共3题,每题20分,总分60分)

题目1(20分):字符串处理问题——最长回文子串

题目描述:

给定一个字符串`s`,请找出其中最长的回文子串。回文子串是指正读和反读都相同的子串。要求时间复杂度尽可能低。

示例输入:`babad`

示例输出:`bab`或`aba`

解题思路:

1.中心扩展法:以每个字符(或两个字符的中间)为中心,向两边扩展,判断最长回文子串。

-时间复杂度:O(n2),空间复杂度:O(1)。

2.动态规划法:使用二维DP数组`dp[i][j]`表示`s[i..j]`是否为回文,逐步求解。

-时间复杂度:O(n2),空间复杂度:O(n2)。

3.Manacher算法:优化中心扩展法,通过预处理避免重复计算,时间复杂度:O(n)。

参考代码(Python,中心扩展法):

python

deflongest_palindrome(s:str)-str:

ifnots:

return

start,end=0,0

foriinrange(len(s)):

len1=expand_from_center(s,i,i)#奇数长度回文

len2=expand_from_center(s,i,i+1)#偶数长度回文

max_len=max(len1,len2)

ifmax_lenend-start:

start=i-(max_len-1)//2

end=i+max_len//2

returns[start:end+1]

defexpand_from_center(s:str,left:int,right:int)-int:

whileleft=0andrightlen(s)ands[left]==s[right]:

left-=1

right+=1

returnright-left-1

题目2(20分):动态规划问题——最长递增子序列

题目描述:

给定一个整数数组`nums`,请找出其中不重复的最长递增子序列的长度。子序列可以由数组中任意位置的元素组成,但不需要连续。

示例输入:`nums=[10,9,2,5,3,7,101,18]`

示例输出:`4`(最长递增子序列为[2,3,7,101]或[2,5,7,101])

解题思路:

1.暴力解法:枚举所有可能的子序列,时间复杂度:O(2^n)。

2.动态规划法:使用DP数组`dp[i]`表示以`nums[i]`结尾的最长递增子序列长度,逐步更新。

-时间复杂度:O(n2),空间复杂度:O(n)。

3.二分查找优化:使用二分查找将时间复杂度降至O(nlogn)。

参考代码(Python,动态规划法):

python

deflength_of_lis(nums):

ifnotnums:

return0

dp=[1]len(nums)

foriinrange(1,len(nums)):

forjinrange(i):

ifnums[i]nums[j]:

dp[i]=max(dp[i],dp[j]+1)

returnmax(dp)

题目3(20分):数据结构问题——二叉树遍历

题目描述:

给定一个二叉树的根节点`root`,请实现深度优先遍历(前序、中序、后序)和广度优先遍历(层序遍历)。

示例输入:

1

/\

23

/\

45

示例输出:

-前序遍历:`[1,2,4,5,3]`

-中序遍历:`[4,2,5,1,3]`

-后序遍历:`[4,5,2,3,1]`

-层序遍历:`[1,2,3,4,5]`

解题思路:

1.深度优先遍历:

-前序:根-左-右

-中序:左-根-右

-后序:左-右-根

使用递归或栈实现。

2.广度优先遍历:

使用队列按层遍历,逐层输出节点。

参考代码(Python,递归实现DFS):

python

Definitionforabinarytreenode.

classTreeNode:

def__init__(self,val=0,left=None,right=None):

self.val=val

self.left=left

self.right=right

前序遍历

defpreorderTraversal(root):

res=[]

defdfs(node):

if

文档评论(0)

1亿VIP精品文档

相关文档