markdown复制## 1. 两数之和问题解析
两数之和(Two Sum)是算法入门最经典的练习题之一,也是各大技术面试中的高频考题。这个问题看似简单,却涵盖了数组遍历、哈希表应用、时间复杂度优化等核心编程概念。我第一次遇到这个问题时,花了整整三小时才写出最优解——现在回头看,其实掌握关键思路后,5分钟就能写出完美答案。
这道题的典型描述是:给定一个整数数组nums和一个目标值target,在数组中找出和为目标值的两个整数,并返回它们的数组下标。假设每种输入只会对应一个答案,且不能重复使用同一个元素。例如:
```python
输入:nums = [2,7,11,15], target = 9
输出:[0,1] # 因为nums[0] + nums[1] = 2 + 7 = 9
2. 解决方案设计与思路拆解
2.1 暴力枚举法(新手首选)
最直观的解法是双层循环遍历所有可能的组合:
python复制def two_sum(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]
时间复杂度:O(n²)
空间复杂度:O(1)
虽然这种方法效率不高,但特别适合编程新手理解问题本质。我在教学时发现,先写出暴力解法再优化,比直接学习最优解更能建立算法思维。
2.2 哈希表优化法(面试必备)
通过哈希表(Python字典)存储已遍历元素,可以将时间复杂度降到O(n):
python复制def two_sum(nums, target):
hashmap = {}
for i, num in enumerate(nums):
complement = target - num
if complement in hashmap:
return [hashmap[complement], i]
hashmap[num] = i
时间复杂
