百度算法工程师面试题及答案参考.docxVIP

  • 0
  • 0
  • 约7.22千字
  • 约 21页
  • 2026-02-13 发布于福建
  • 举报

第PAGE页共NUMPAGES页

2026年百度算法工程师面试题及答案参考

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

1.(20分)字符串最长公共子串问题

题目:

给定两个字符串`str1`和`str2`,请编写一个函数,找出并返回它们的最长公共子串的长度。子串是指连续的字符序列。

示例:

输入:`str1=abcdefg`,`str2=xyzabcde`

输出:`6`(公共子串为abcde)

要求:

-使用动态规划方法解决。

-时间复杂度不超过O(nm),n和m分别为两个字符串的长度。

答案与解析:

python

deflongest_common_substring(str1,str2):

m,n=len(str1),len(str2)

dp=[[0](n+1)for_inrange(m+1)]

max_len=0

end_pos=0

foriinrange(1,m+1):

forjinrange(1,n+1):

ifstr1[i-1]==str2[j-1]:

dp[i][j]=dp[i-1][j-1]+1

ifdp[i][j]max_len:

max_len=dp[i][j]

end_pos=i

else:

dp[i][j]=0

returnmax_len

示例

print(longest_common_substring(abcdefg,xyzabcde))#输出6

解析:

-动态规划表`dp[i][j]`表示`str1[:i]`和`str2[:j]`的最长公共子串长度。

-初始条件:`dp[0][j]`和`dp[i][0]`均为0。

-状态转移:若`str1[i-1]==str2[j-1]`,则`dp[i][j]=dp[i-1][j-1]+1`;否则`dp[i][j]=0`。

-通过遍历表找到最大值,其对应的最长公共子串长度为`max_len`。

2.(20分)K个最近邻点问题

题目:

给定一个二维平面上的点集合`points`和一个整数`K`,请编写一个函数,找出距离给定点`query`最近的`K`个点。

示例:

输入:`points=[[1,3],[3,4],[2,6]]`,`K=2`,`query=[2,5]`

输出:`[[1,3],[2,6]]`(按欧氏距离排序)

要求:

-使用快速选择算法(Quickselect)优化时间复杂度至O(n)。

-忽略浮点精度问题,使用整数距离计算。

答案与解析:

python

defk_nearest_points(points,K,query):

defdistance(p1,p2):

return(p1[0]-p2[0])2+(p1[1]-p2[1])2

defpartition(arr,l,r,pivot_idx):

pivot=distance(arr[pivot_idx],query)

arr[pivot_idx],arr[r]=arr[r],arr[pivot_idx]

store_idx=l

foriinrange(l,r):

ifdistance(arr[i],query)pivot:

arr[store_idx],arr[i]=arr[i],arr[store_idx]

store_idx+=1

arr[store_idx],arr[r]=arr[r],arr[store_idx]

returnstore_idx

defquickselect(arr,l,r,K):

ifl==r:

return

pivot_idx=l

pivot_idx=partition(arr,l,r,pivot_idx)

ifK==pivot_idx:

return

elifKpivot_idx:

quickselect(arr,l,pivot_idx-1,K)

else:

quickselect(arr,pivot_idx+1,r,K)

points_sorted=points.copy()

quickselect(points_sorted,0,len(points_sorted)-1,K-1)

returnpoints_sorted[:K]

示例

print(k_nearest_points([[1,3],[3,4],[2,6]],2,[2,5]))#输出[[1,3],[2,6]]

解析:

-快速选择

文档评论(0)

1亿VIP精品文档

相关文档