- 0
- 0
- 约4.82千字
- 约 14页
- 2026-03-09 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年携程智能算法工程师面试问题及答案
一、编程与算法基础(共5题,每题8分,总分40分)
1.题目:
给定一个数组,返回其中重复次数最多的元素及其出现次数。例如,输入`[1,2,2,3,4,4,4]`,输出`4:3`。
要求:时间复杂度O(n),空间复杂度O(1)。
答案:
python
defmost_frequent(nums):
ifnotnums:
returnNone
freq={}
max_freq=0
result=None
fornuminnums:
ifnuminfreq:
freq[num]+=1
else:
freq[num]=1
iffreq[num]max_freq:
max_freq=freq[num]
result=num
returnf{result}:{max_freq}
示例
print(most_frequent([1,2,2,3,4,4,4]))#输出:4:3
解析:
-使用哈希表`freq`记录每个数字的出现次数,遍历一次数组即可统计(O(n)时间)。
-通过`max_freq`和`result`记录最大频率的数字及其次数。
-空间复杂度受限于数组中不同数字的数量,最坏情况下为O(n),但题目要求“近似O(1)”可通过特定语言实现(如固定大小哈希表),此处为简化假设。
2.题目:
实现一个函数,检查一个字符串是否为“回文串”(忽略大小写和非字母字符)。例如,`Aman,aplan,acanal:Panama`应返回`True`。
答案:
python
defis_palindrome(s):
s=.join(c.lower()forcinsifc.isalnum())
left,right=0,len(s)-1
whileleftright:
ifs[left]!=s[right]:
returnFalse
left+=1
right-=1
returnTrue
示例
print(is_palindrome(Aman,aplan,acanal:Panama))#输出:True
解析:
-首先过滤字符串,保留字母和数字并统一为小写。
-使用双指针从两端向中间比较,若发现不匹配则返回`False`。
-时间复杂度O(n),空间复杂度O(n)(因过滤后字符串可能需要额外空间)。
3.题目:
给定一个无重复元素的数组`nums`和一个目标值`target`,返回所有和为`target`的数字对。例如,`nums=[2,7,11,15]`,`target=9`,输出`[(2,7)]`。
答案:
python
deftwo_sum(nums,target):
num_map={}
result=[]
fornuminnums:
complement=target-num
ifcomplementinnum_map:
result.append((complement,num))
num_map[num]=True
returnresult
示例
print(two_sum([2,7,11,15],9))#输出:[(2,7)]
解析:
-使用哈希表`num_map`记录每个数字的索引,避免重复对同一数字计算补数。
-遍历数组时,检查`target-num`是否已存在于哈希表中,若存在则记录一对解。
-时间复杂度O(n),空间复杂度O(n)。
4.题目:
实现快速排序算法(原地排序)。
答案:
python
defquick_sort(arr):
defpartition(left,right):
pivot=arr[right]
i=left-1
forjinrange(left,right):
ifarr[j]=pivot:
i+=1
arr[i],arr[j]=arr[j],arr[i]
arr[i+1],arr[right]=arr[right],arr[i+1]
returni+1
defsort(left,right):
ifleftright:
pivot_index=partition(left,right)
sort(left,pivot_index-1)
sort(pivot_index+1,right)
原创力文档

文档评论(0)