LeetCode两数之和的求解请教

img


请问在第二个for循环里j=i+1 和j= 1 在结果上 不应该只是减少遍历次数吗 为什么会一个对一个错呢

[1,2,3],target为2
i = 1
j = i的话,j = 1

nums[i]+nums[j]=2,
但实际上i和j都指向数组第一个元素,不符题意

img

会有重复

两数之和,不是同一个数加2次;

如果数组是【2,2,1,1】,正确答案应该是【1,2】
如果j=i+1 则输出【1,2】,对
如果j=1 则输出【1,1】,错。
这样描述你应该就知道自己错在哪儿了,其次这不是最高效的做法,用hash
算法是最快的。

        // 数组
        int[] nums = new int[]{1,1,2,10,20,30};
        // 目标值
        int target=2;
        HashMap<Integer,Integer> map = new HashMap();
        for (int i = 0; i < nums.length; i++) {
            if (map.containsKey(target-nums[i])){
                System.out.println("["+i+","+map.get(target-nums[i])+"]");
            }
            map.put(nums[i],i);
        }
    }

```java



```