1、分析题目
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
2、代码实现
暴力破解法
双重 for 循环遍历数组,外层 i 遍历 nums 里每一个元素,内层 j 也遍历,寻找 target - nums[i] 是否存在。找到后直接返回结果。
public int[] twoSum(int[] nums, int target) {
for (int i = 0; i < nums.length; i++) {
for (int j = i + 1; j < nums.length; j++) {
if (nums[j] == target - nums[i]) {
return new int[]{i, j};
}
}
}
throw new IllegalArgumentException("No two sum solution");
}
哈希表法
利用哈希表存储已遍历过的元素及其索引。遍历数组时,检查 target - nums[i] 是否在哈希表中。若存在则返回结果,否则将当前元素加入哈希表。初始化第一个元素到哈希表可以提高效率。
import java.util.HashMap;
import java.util.Map;
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)) {
[]{map.get(complement), i};
}
map.put(nums[i], i);
}
();
}


