题目大意
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
思路分析
由题目中的有唯一的一个答案使得题目难度降低了。值得注意的是答案中不允许出现同一元素,也就是说,一个元素只能使用一次来构建target,在测试用例中有所体现。
- 暴力破解
双层循环返回符合nums[i] + nums[j] = target
条件的i 和 j - 使用HashMap:顺序扫描数组,对每一个元素,在 map 中找
target - nums[i]
的另一半数字,如果找到了,直接返回 2 个数字的下标即可。如果找不到,就把这个数字存入 map 中,等待扫到另一个数字的时候,再取出来返回结果。
代码
class Solution {
public int[] 暴力破解(int[] nums, int target) {
int len = nums.length;
for(int i=0; i<len; i++){
for(int j=i+1; j<len; j++){
if(nums[i] + nums[j] == target)
return new int[] {i,j};
}
}
return null;
}
public int[] twoSum(int[] nums, int target) {
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
int len = nums.length;
for(int j=0; j<len; j++){
if(map.containsKey(target-nums[j]))
return new int [] {j,map.get(target-nums[j])};
else
map.put(nums[j], j);
}
return null;
}
}