码迷,mamicode.com
首页 > 其他好文 > 详细

4Sum

时间:2014-11-15 20:17:54      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:4sum   leetcode   

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;
    }
}


4Sum

标签:4sum   leetcode   

原文地址:http://blog.csdn.net/u010786672/article/details/41149157

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!