
java
import java.util.HashMap;
import java.util.Map;
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int diff = target - nums[i];
if (map.containsKey(diff)) {
return new int[] { map.get(diff), i };
}
map.put(nums[i], i);
}
return new int[] {}; // 理论上不会走到这,因为题目保证有解
}
}
总结
-
哈希表是精髓 :
它天然支持 数值 → 索引 的映射关系,用起来非常方便。
-
遍历时的操作:
-
对于当前数
num
,先计算差值diff = target - num
; -
用
containsKey(diff)
判断哈希表里有没有这个"搭档"。
-
-
分两种情况:
-
如果有 → 说明答案找到了,直接返回
[map.get(diff), i]
。 -
如果没有 → 把当前数存进哈希表,等后面的数来配对。
-
-
核心思想:
-
先查找,再存储,避免自己和自己配对。
-
哈希表让查找和存储都变成
O(1)
,所以整体时间复杂度降为O(n)
。
-