4Sum

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

Note:

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

    For example, given array S = {1 0 -1 0 -2 2}, and target = 0.

    A solution set is:
    (-1,  0, 0, 1)
    (-2, -1, 1, 2)
    (-2,  0, 0, 2)

算法1:排序后,固定前两个数,后两个数适用双指针,O(N^3).

java:

public class Solution {
    public List<List<Integer>> fourSum(int[] num, int target) {
        int len=num.length;
        Arrays.sort(num);
        List<List<Integer>> list =new LinkedList<List<Integer>>();
        
        int i=0;
        while(i<len-3){
            int j=i+1;
            while(j<len-2){
                int k=j+1;
                int l=len-1;
                while(k<l){
                    int sum = num[i]+num[j]+num[k]+num[l];
                    if(sum==target){
                        List<Integer> lst = new LinkedList<Integer>();
                        lst.add(num[i]);
                        lst.add(num[j]);
                        lst.add(num[k]);
                        lst.add(num[l]);
                        list.add(lst);
                        
                        while(k+1<len-1&&num[k]==num[k+1]){
                            k++;
                        }
                        k++;
                        while(l-1>2&&num[l]==num[l-1]){
                            l--;
                        }
                        l--;
                    }else if(sum<target){
                        k++;
                    }else{
                        l--;
                    }
                }
                while(j+1<len-2&&num[j]==num[j+1])
                    j++;
                j++;
            }
            while(i+1<len-3&&num[i]==num[i+1])
                i++;
            i++;
        }
        return list;
    }
}


posted @ 2014-11-15 20:02  bingtel  阅读(160)  评论(0编辑  收藏  举报