3Sum

来源:互联网 发布:砧板 知乎 编辑:程序博客网 时间:2024/05/20 23:56


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

Note:

  • Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
  • The solution set must not contain duplicate triplets.

    For example, given array S = {-1 0 1 2 -1 -4},    A solution set is:    (-1, 0, 1)    (-1, -1, 2)
左右夹逼

时间复杂度 O(n^2)

空间复杂度 O(1)

public class Solution {

    public List<List<Integer>> threeSum(int[] num) {
        List<List<Integer>> list1 = new ArrayList<List<Integer>>(); //List is an abstract type
        Arrays.sort(num);
        for(int i=0;i<num.length;i++){
            if(i>0 && num[i]==num[i-1]){    //How to remove duplicates
                continue;
            }
            int left = i+1, right=num.length-1;
            while(left<right){
                if(right<num.length-1 && num[right]==num[right+1]){
                    right--;
                    continue;
                }
                if(num[i]+num[left]+num[right]==0){
                    List<Integer> list2 = new ArrayList<Integer>();
                    list2.add(num[i]);
                    list2.add(num[left]);
                    list2.add(num[right]);
                    list1.add(list2);
                    left++;
                    right--;
                }else if(num[i]+num[left]+num[right]<0){
                    left++;
                }else{
                    right--;
                }
            }
        }
        return list1;
    }
}
0 0
原创粉丝点击