1. 为什么两数之和是面试必刷题
两数之和作为Leetcode题库的第一题,常年占据热榜前10的位置。这道编号为1的题目之所以成为经典,是因为它完美涵盖了算法面试中最核心的考察点:
- 哈希表应用的标杆题:考察候选人是否掌握用空间换时间的基本优化思想
- 边界条件检测的试金石:空数组、无解情况、重复元素等场景都需要考虑
- 多种解法的对比题:暴力法、哈希法、双指针法(需先排序)各有适用场景
我在面试候选人时发现,90%的初级开发者能写出暴力解法,但只有30%能准确分析时间复杂度。能完整写出哈希解法并解释清楚冲突处理的,更是不到20%。这就是为什么这道"简单题"能筛掉大量准备不足的候选人。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 四种解法深度对比
2.1 暴力枚举法
最直观的解法是双重循环遍历所有组合:
python复制def twoSum(nums, target):
for i in range(len(nums)):
for j in range(i+1, len(nums)):
if nums[i] + nums[j] == target:
return [i, j]
return []
时间复杂度:O(n²)
空间复杂度:O(1)
适用场景:数据量极小(n<100)或对内存有严格限制时
2.2 哈希表缓存法
利用字典存储已遍历元素,将查找时间降到O(1):
python复制def twoSum(nums, target):
seen = {}
for i, num in enumerate(nums):
complement = target - num
if complement in seen:
return [seen[complement], i]
seen[num] = i
return []
时间复杂度:O(n)
空间复杂度:O(n)
注意事项:Python字典处理哈希冲突的方式会影响实际性能
2.3 排序+双指针法
先排序后使用左右指针逼近目标:
p复制
