1_两数之和[EASY]
约 303 字大约 1 分钟
2026-03-08
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。解题思路
哈希表, 构建一个 map(值, 数组下标) ,也就是 map(nums[i], i)
遍历数组:
- 如果
target - nums[i]在 map 里面, 说明当前的 i 和 map 已有的下标为map.get(target - nums[i])的元素构成一个答案 - 如果不在 map 里面,则把
map(nums[i], i)加入 map ,继续遍历
重点是 map 的 key 是数组值, value 是数组下标
Java 实现
class Solution {
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);
}
// 由于题目保证必定存在一个有效答案,正常情况下循环内一定会返回。
// 这里的抛出异常或返回空数组只是为了保证 Java 编译器的语法完整性。
throw new IllegalArgumentException("No two sum solution");
}
}