2026年百度搜索算法工程师面试题目及答案.docxVIP

  • 3
  • 0
  • 约4.09千字
  • 约 12页
  • 2026-02-17 发布于福建
  • 举报

2026年百度搜索算法工程师面试题目及答案.docx

第PAGE页共NUMPAGES页

2026年百度搜索算法工程师面试题目及答案

一、编程题(3题,每题15分,共45分)

1.(15分)

题目:

实现一个函数,输入一个正整数`n`,返回`n`的“数字根”,即对`n`连续进行数字求和,直到结果为一位数为止。

例如:

-输入:38,输出:2(3+8=11,1+1=2)

-输入:12345,输出:6(1+2+3+4+5=15,1+5=6)

要求:

-不能使用递归或循环,仅用一行代码实现。

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

答案:

python

defdigital_root(n):

return1+(n-1)%9ifnelse0

解析:

数字根的计算可以用数学公式`digital_root(n)=1+(n-1)%9`直接求解,无需循环或递归。公式基于数字根的性质:

-当`n`为0时,结果为0;

-当`n`不为0时,结果为`(n-1)%9+1`。

例如:

-`n=38`,`(38-1)%9=37%9=1`,结果为`1+1=2`;

-`n=12345`,`(12345-1)%9=12344%9=6`,结果为`6+1=7`(注意:示例输出有误,正确应为7)。

修正示例输出:

-输入:38,输出:2;

-输入:12345,输出:7。

2.(15分)

题目:

给定一个包含重复元素的数组`nums`,返回所有可能的“子集”列表,其中子集不能包含重复元素。

例如:

-输入:`[1,2,2]`,输出:`[[],[1],[1,2],[1,2,2],[2],[2,2]]`

要求:

-子集的顺序不重要;

-不能使用相同的数字多次(如`[1,2]`和`[2,1]`视为相同)。

答案:

python

defsubsets_with_dup(nums):

nums.sort()

res=[]

subset=[]

used=[False]len(nums)

defbacktrack(start):

res.append(subset[:])

foriinrange(start,len(nums)):

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

continue

subset.append(nums[i])

used[i]=True

backtrack(i+1)

subset.pop()

used[i]=False

backtrack(0)

returnres

解析:

解决思路:

1.先对`nums`排序,以便通过相邻元素判断重复;

2.使用回溯法生成所有子集,同时避免重复子集:

-如果当前元素与前一个元素相同,且前一个元素未被使用,则跳过当前元素;

-否则,将当前元素加入子集,并继续回溯;

3.最终结果存储在`res`中。

示例输出:

-输入:`[1,2,2]`,输出:`[[],[1],[1,2],[1,2,2],[2],[2,2]]`。

3.(15分)

题目:

实现一个函数,输入一个字符串`s`,返回`s`中所有唯一的“最长回文子串”的长度。

例如:

-输入:`babad`,输出:`3`(bab或aba的长度);

-输入:`cbbd`,输出:`2`(bb的长度)。

要求:

-必须返回所有唯一最长回文子串的长度,而非具体子串;

-回文子串可以是奇数或偶数长度。

答案:

python

deflongest_palindrome_length(s):

n=len(s)

ifn==0:

return0

dp=[[False]nfor_inrange(n)]

max_len=1

foriinrange(n):

dp[i][i]=True

foriinrange(n-1,-1,-1):

forjinrange(i+1,n):

ifs[i]==s[j]:

ifj-i==1ordp[i+1][j-1]:

dp[i][j]=True

max_len=max(max_len,j-i+1)

returnmax_len

解析:

解决思路:

1.使用动态规划(DP)解决:

-`dp[i][j]`表示`s[i..j]`是否为回文子串;

-如果`s[i]==s[j]`且`s[i+1..j-1]`为回文,则`s[i..j]`为回文;

2.

文档评论(0)

1亿VIP精品文档

相关文档