LeetCode15-三数之和

本文最精华的就是下面的视频讲解!
:参考的视频讲解


class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        List<List<Integer>> ans = new ArrayList<>();
        
        Arrays.sort(nums);
        int n=nums.length;
        int i=0,j=0,k=0,sum=0;
        for(;i<n-2;++i){
            if(i>0&&nums[i]==nums[i-1]){
                continue;
            }
            if(nums[i]+nums[i+1]+nums[i+2]>0){
                break;
            }
            if(nums[i]+nums[n-2]+nums[n-1]<0){
                continue;
            }
            j=i+1;
            k=n-1;
            for(;j<k;){
                sum=nums[i]+nums[j]+nums[k];
                if(sum<0){
                    j++;
                }else if(sum>0){
                    k--;
                }else{
                    List<Integer> tmp=new ArrayList<Integer>();
                    tmp.add(nums[i]);
                    tmp.add(nums[j]);
                    tmp.add(nums[k]);
                    ans.add(tmp);
                    j++;
                    while(j<k&&nums[j]==nums[j-1]){
                        ++j;
                    }
                    k--;
                    while(k>j&&nums[k]==nums[k+1]){
                        k--;
                    }
                }
            }
            
        }
        return ans;
    }
}

你可能感兴趣的:(LeetCode题库,算法,java,三数之和)