21.03.09 LeetCode15. 三数之和


给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。


注意:答案中不可以包含重复的三元组。


示例 1:


输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
示例 2:


输入:nums = []
输出:[]
示例 3:


输入:nums = [0]
输出:[]

class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        //先排序,再从0开始对
        List<List<Integer>> ans = new ArrayList<List<Integer>>();
        int len = nums.length;
        if(nums==null || len<3)
            return ans;
        Arrays.sort(nums);
        //这里的终止条件,可以写len也可以写len-2,写len-2会更加减少执行用时
        //因为少了两次循环,在所有测试用例加起来就少了很多次
        for(int i = 0;i<len-2;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)
                {
                    List<Integer> t = new ArrayList<>();
                    t.add(nums[i]);t.add(nums[L]);t.add(nums[R]);
                    ans.add(t);
                    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;
       
    }
}

 

posted @ 2021-03-09 09:11  γGama  阅读(46)  评论(0)    收藏  举报