我正在通过使用最好的数据结构学习一些优化技巧,我试图理解这行代码 . 问题来自这里 . https://leetcode.com/problems/two-sum/
所以我的第一次尝试有 O(n^2)
这是不好的所以我决定阅读Hashmap解决方案 .
我对这行代码有疑问:
else {
map.put(target - nums[i], i);
}
我理解它的方式是我们正在采取这样的 target - nums[i],i
32683_
整个代码在这里:
public static int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
if (map.containsKey(nums[i])) {
return new int[]{map.get(nums[i]),i};
} else {
map.put(target - nums[i],i);
}
}
return null;
}
任何帮助了解这条线的作用将不胜感激如何操作 map.put(target - nums[i],i);
1 回答
通过将
target - nums[i]
键和i
值放在Map
中,你要说的是为了让nums[i]
参与一对总和为target
的元素,你必须找到另一个值为target - nums[i]
的元素,或者换句话说,找到一个元素,其值是Map
中的一个键(即map.containsKey(nums[i])
是true
) .因此,一旦找到
i
这样map.containsKey(nums[i])
是true
,就知道nums[i] + nums[map.get(nums[i])] == target
,所以你返回索引对i
和map.get(nums[i])
.