3 sum

LeetCode15:给定一个包含n个整数的数组 nums,判断 nums 中是否存在三个元素a,b,c ,使得 a + b + c =0 ?找出所有满足条件且不重复的三元组。

public List> threeSum(int[] nums) {
    if (nums == null || nums.length < 3) {
        return Collections.emptyList();
    }

    Arrays.sort(nums);

    List> ret = new ArrayList<>();
    for (int i = 0; i < nums.length - 2; i++) {
        if (i > 0 && nums[i] == nums[i - 1]) {
            continue;
        }
        int x = nums[i];
        int p = i + 1, q = nums.length - 1;
        while (p < q) {
            if (nums[p] + nums[q] + x == 0) {
                ret.add(Stream.of(x, nums[p], nums[q]).collect(Collectors.toList()));
                while (++p < q && nums[p] == nums[p - 1]);
                while (--q > p && nums[q] == nums[q + 1]);
            } else if (nums[p] + nums[q] + x > 0) {
                while (--q > p && nums[q] == nums[q + 1]);
            } else {
                while (++p < q && nums[p] == nums[p - 1]);
            }
        }
    }
    return ret;
}

这段代码包含了数组和循环的技巧,值得反复玩味。

你可能感兴趣的:(3 sum)