- 0
- 0
- 约4.82千字
- 约 14页
- 2026-01-15 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年百度运维开发工程师面试题目及高分局解答
一、编程实现题(3题,每题20分)
1.(20分)
题目:
请实现一个函数`mergeIntervals(intervals)`,输入一个二维数组`intervals`,其中每个元素是一个包含两个整数的数组,表示一个区间的开始和结束时间(例如`[[1,3],[2,6],[8,10],[15,18]]`)。函数需要合并所有重叠的区间,并返回一个不重叠的区间数组。合并的规则是:如果两个区间有重叠(即一个区间的开始时间小于另一个区间的结束时间),则将它们合并为一个新区间,新区间的开始时间是两个区间的最小开始时间,结束时间是两个区间的最大结束时间。
示例:
输入:`[[1,3],[2,6],[8,10],[15,18]]`
输出:`[[1,6],[8,10],[15,18]]`
要求:
-不能使用任何外部库。
-时间复杂度尽可能低。
答案与解析:
python
defmergeIntervals(intervals):
ifnotintervals:
return[]
按区间的开始时间排序
intervals.sort(key=lambdax:x[0])
merged=[intervals[0]]
forcurrentinintervals[1:]:
last=merged[-1]
ifcurrent[0]=last[1]:#有重叠
last[1]=max(last[1],current[1])
else:
merged.append(current)
returnmerged
解析:
1.排序:首先按区间的开始时间对输入的区间进行排序,这样相邻的区间更容易判断是否重叠。时间复杂度为O(nlogn)。
2.合并:初始化`merged`列表,将第一个区间加入。然后遍历后续区间,对于每个当前区间`current`,如果它的开始时间`current[0]`小于等于`merged`中最后一个区间的结束时间`last[1]`,则说明有重叠,更新`last[1]`为`max(last[1],current[1])`;否则,将`current`加入`merged`。
3.返回结果:最终`merged`列表中存储的就是所有合并后的不重叠区间。
时间复杂度:排序O(nlogn)+遍历O(n),总体O(nlogn)。
2.(20分)
题目:
请实现一个函数`topKFrequent(nums,k)`,输入一个整数数组`nums`和一个整数`k`,返回`nums`中出现频率最高的`k`个元素。如果有多个元素频率相同,可以任意返回其中`k`个。
示例:
输入:`nums=[1,1,1,2,2,3],k=2`
输出:`[1,2]`
要求:
-不能使用内置的`Counter`或类似工具。
-时间复杂度尽可能低。
答案与解析:
python
deftopKFrequent(nums,k):
fromcollectionsimportdefaultdict
统计频率
freq=defaultdict(int)
fornuminnums:
freq[num]+=1
排序(按频率降序)
sorted_freq=sorted(freq.items(),key=lambdax:x[1],reverse=True)
取前k个
return[item[0]foriteminsorted_freq[:k]]
解析:
1.统计频率:使用`defaultdict`统计数组中每个数字的出现次数。
2.排序:将频率字典按频率降序排序,排序键为频率值`x[1]`。时间复杂度为O(nlogn)。
3.取前k个:从排序后的列表中取出前`k`个元素。
时间复杂度:统计频率O(n)+排序O(nlogn),总体O(nlogn)。
优化方案:如果`k`较小,可以使用堆(优先队列)优化到O(nlogk),但题目要求不使用外部库,故采用排序。
3.(20分)
题目:
请实现一个函数`wordBreak(s,wordDict)`,输入一个字符串`s`和一个字符串集合`wordDict`,判断`s`是否可以由`wordDict`中的单词按顺序拼接而成。可以重复使用`wordDict`中的单词。
示例:
输入:`s=leetcode,wordDict=[leet,code]`
输出:`True`
要求:
-不能使用动态规划以
原创力文档

文档评论(0)