三数之和

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

示例:例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],

满足要求的三元组集合为:

[

  [-1, 0, 1],

  [-1, -1, 2]

]

java代码

class Solution {

    public List<List<Integer>> threeSum(int[] nums) {

        List<List<Integer>> ans = new ArrayList();

        Arrays.sort(nums);

        int len = nums.length;

        if (nums == null || len < 3) return ans;

        for (int i=0;i<len;i++) {

            if(nums[i]>0) break;

            if (i>0 && nums[i]==nums[i-1]) continue;

            int L = i + 1;

            int R = len - 1;

            while (L < R) {

                int sum = nums[i] + nums[L] + nums[R];

                if (sum == 0) {

                    ans.add(Arrays.asList(nums[i],nums[L],nums[R]));

                    while (L<R && nums[L] == nums[L+1]) L++;

                    while (L<R && nums[R] == nums[R-1]) R--;

                    L++;

                    R--;

                }

                else if (sum < 0) L++;

                else if (sum > 0) R--;

            }

        }

        return ans;

    }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容