用Set不合适,改用map的话,key用来记录nums[i]的值,value用来记录对应的下标
public int[] twoSum(int[] nums, int target) {
int[] result = new int[2];
Map<Integer,Integer> map = new HashMap<>();
for (int i = 0; i < nums.length ; i++) {
map.put(nums[i],i);
}
for (int i = 0; i < nums.length; i++) {
int tmp = target - nums[i];
if(map.containsKey(tmp)&&map.get(tmp)!=i){
result[0] = map.get(tmp);
result[1] = i;
}
}
return result;
}
作者回复: Cool!
2019-10-10
7
Toby
private static int[] two_sum_method(int[] nums, int target) {
Map<Integer, Integer> tempMap = new HashMap<Integer, Integer>();
for (Integer i = 0; i < nums.length; i++) {
if (tempMap.get(nums[i]) == null) {
tempMap.put(target-nums[i], i);
} else {
return new int[]{i, tempMap.get(i)};
}
}
return null;
}
作者回复: cool!
2019-08-21
2
1
yann [扬] :曹同学
同样的代码,python3里面运行时间是python的3倍??
作者回复: 可以大概是 leetcode 自己的问题。
2018-11-15
叶子
set不允许重复。如果是数组是[3,3] target是6,则set是3,所以这里不能用set。
2018-10-29
3
34
jevis
因为set的无序 所以在获取第一个数的下标的时候会有问题,所以这里使用set不是很好,不过可以使用map,用来存储下标和数:
public int[] twoSum(int[] nums, int target) {
HashMap<Integer, Integer> map = new HashMap<>();
int[] ans = new int[2];
for (int i = 0; i < nums.length; i++) {
int tt = target - nums[i];
if (map.containsKey(nums[i])) {
ans[0] = map.get(nums[i]);
ans[1] = i;
} else {
map.put(tt, i);
}
}
return ans;
}
2018-11-01
20
子青
题目要求返回的是下标,用map好些吧,可以存储下标
2018-10-27
1
7
adream307
对于每一个知识点,老师能否举个leetcode上hard的题,谢谢?
2018-10-26
4
mickey
nums:[3,3]
target:6
用Set怎么解?
2020-03-01
2
缪文
这个还可以更简单,用Map,key是9-x的值,value是x的下标,开始遍历前map是空的,遍历的同时判断,if(map.get(x)==null){map.put(i)} else return new int[]{i,map.get(x);
o(n)的时间复杂度