LeetCode-1. Two Sum(Hash表)
程序员文章站
2022-07-15 14:15:11
...
LeetCode-1. Two Sum(Hash表)
- 方法一
-
方法二
还可以使用Hash表解决类似的进阶问题
方法一
使用HashMap存储每个数的下标,然后遍历数组,寻找target - nums[i]在map中存不存在,如果存在,记为L,说明存在L+nums[i] = target,这样遍历时间复杂度为O(n)。
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer>map = new HashMap<Integer,Integer>();
int[] res = {0,0};
for(int i = 0; i < nums.length; i++){
map.put(nums[i],i);
}
for (int i = 0; i < nums.length; i++) {
int L = target - nums[i];
if(map.containsKey(L) && map.get(L) != i){
res[0] = map.get(L);
res[1] = i;
break;
}
}
return res;
}
方法二
也是使用HashMap,但是我们可以一开始不存上每个数的下标,而是在遍历到nums[i]的时候,我们就查nums[i]在哈希表中存不存在,最后存上target-nums[i],这样就不要一开始就存一次所有的下标。
比如:
public int[] twoSum(int[] nums,int target){
Map<Integer,Integer>map = new HashMap<Integer,Integer>();
int[] res = {0,0};
for (int i = 0; i < nums.length; i++) {
if(map.containsKey(nums[i])){
res[0] = map.get(nums[i]);
res[1] = i;
break;
}
map.put(target-nums[i],i);
}
return res;
}
推荐阅读
-
【leetcode】#1 Two Sum【Hash】【Easy】
-
LeetCode 1 Two Sum (hash)
-
1. Two Sum:关于引用和hash table的思考
-
LeetCode C++ 599. Minimum Index Sum of Two Lists【Hash Table】简单
-
Two Sum (两数之和) - Hash Table (哈希表)
-
LeetCode-1. Two Sum(Hash表)
-
LeetCode C++ 454. 4Sum II【Hash Table/Sort/Two Pointers/Binary Search】
-
【LeetCode】1. Two Sum(Hash Table)
-
leetcode:two sum,Subarray Sum类的问题 (hash table)