思路:利用Map,遍历数组,如果target-num[i]在哈希表中,那么返回两者的下标,否则将num[i]加入到map中。
即使数组中存在相同的数字,也不会是map的key冲突,根据题设不可能会有两个答案,如果第一个存入的数字永远不满足题设,那么后面存入的和它相同的数字也不会满足题设,或者说没有必要存重复的。
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> map = new HashMap<>();
for(int i = 0;i < nums.length;i++) {
int last = target - nums[i];
if(map.containsKey(last) && map.get(last) != i) {
return new int[] {Math.min(i,map.get(last)),Math.max(i,map.get(last))};
}
else{
map.put(nums[i], i);
}
}
return new int[]{};
}
}