15. 3Sum

Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

Note:

The solution set must not contain duplicate triplets.

Example:

Given array nums = [-1, 0, 1, 2, -1, -4],
A solution set is:
[
[-1, 0, 1],
[-1, -1, 2]
]

题目

给定一个数组,是否存在a,b,c三个元素,使得a+b+c=0,找出所有符合条件的组合。

思路

首先将数组排序,排好以后,我们先固定一个数,然后两对撞指针找剩下俩数,所以需要两重循环。
有一些减少循环计算的细节,首先三个数加起来为0,其中肯定有负数,数组又是排好序的,所以我们一上来判断一下选定的值是否大于零,若不是就不用往下找了。
其次,题目要求不能有重复的组合,所以我们在选定一个数后,判断一下和他上一个数一样不,一样的话有可能会产生相同组合,所以就continue。

代码

 Arrays.sort(nums);
            List> res = new ArrayList>();
            int len = nums.length;
            for (int i = 0; i < nums.length; i++) {
                if (nums[i]>0) {//因为数组排好序了,如果当前数都大于0,后面肯定都大于0,就不用找了
                    break;
                }
                if (i>0&&nums[i]==nums[i-1]) {//为了避免结果集中组合重复
                    continue;
                }
                int begin = i + 1;//两头往中间找
                int end = len - 1;
                while (begin0){
                        end--;
                    }else {
                        begin++;
                    }
                }
            }
            return res;

你可能感兴趣的:(15. 3Sum)