以下是Java实现“两数之和”的代码,附带注释、记忆口诀:
代码实现(带注释)
import java.util.HashMap;
import java.util.Map;
public class TwoSum {
public int[] twoSum(int[] nums, int target) {
// 哈希表存储:值 -> 索引(快速查找互补数)
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
// 计算当前元素的互补数(目标 - 当前值)
int complement = target - nums[i];
// 若互补数已在哈希表中,直接返回两个索引
if (map.containsKey(complement)) {
return new int[]{map.get(complement), i};
}
// 否则将当前值和索引存入哈希表
map.put(nums[i], i);
}
// 题目保证有解,此处仅为避免编译错误
throw new IllegalArgumentException("No solution");
}
}
记忆口诀
两数之和找索引,哈希表来帮大忙
遍历数组算互补,存在就把索引返
不存在就存当前,一次遍历效率高
关键点记忆:
- 核心思路:用哈希表存储已遍历元素的值和索引,通过“互补数”(
target - 当前值)快速查找 - 时间复杂度:O(n)(只需一次遍历)
- 空间复杂度:O(n)(哈希表最多存储n个元素)