我正在通过使用最佳数据结构来学习一些优化技巧,我试图理解这一行代码。问题是从这里提出的。 {{3}}
所以我的第一次尝试有一个O(n^2)
这很糟糕,所以我决定通读Hashmap解决方案。
我对以下代码行有疑问:
else {
map.put(target - nums[i], i);
}
我了解的方式是我们采用这样的target - nums[i],i
9 - 2, 0 = 5, 0
9 - 7, 1 = 2, 1
9 - 5, 2 = 4, 2
9 - 11, 3 = -2, 3
整个代码在这里:
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;
}
任何帮助您理解此行的内容的人,将感谢put如何操作map.put(target - nums[i],i);
答案 0 :(得分:1)
通过将target - nums[i]
键和i
值放在Map
中,您的意思是为了使nums[i]
参与一对总和为target
,您必须找到另一个值为target - nums[i]
的元素,换句话说,要找到一个值为Map
中键的元素(即map.containsKey(nums[i])
为{ {1}}。
因此,一旦找到true
为i
的{{1}},就知道map.containsKey(nums[i])
,因此就返回了一对索引true
和nums[i] + nums[map.get(nums[i])] == target
。