LeetCode - 1. Two Sum(Hash)
题目
方法一
使用 HashMap
存储每个数的下标,然后遍历数组,寻找 target - nums[i]
在 map
中存不存在,如果存在,记为 L
,说明存在 L+nums[i] = target
,这样遍历时间复杂度为 O(n)
。
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
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]
,这样就不要一开始就存一次所有的下标。
比如:
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
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;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: jQuery 中的动画效果
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论