将功能放在哈希图上

时间:2018-12-09 19:12:41

标签: java

我正在通过使用最佳数据结构来学习一些优化技巧,我试图理解这一行代码。问题是从这里提出的。 {{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);

1 个答案:

答案 0 :(得分:1)

通过将target - nums[i]键和i值放在Map中,您的意思是为了使nums[i]参与一对总和为target,您必须找到另一个值为target - nums[i]的元素,换句话说,要找到一个值为Map中键的元素(即map.containsKey(nums[i])为{ {1}}。

因此,一旦找到truei的{​​{1}},就知道map.containsKey(nums[i]),因此就返回了一对索引truenums[i] + nums[map.get(nums[i])] == target