LeetCode 17 4Sum

来源:互联网 发布:jsp 收费系统 源码 编辑:程序博客网 时间:2024/05/01 20:23

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)
public class Solution {    public List<List<Integer>> fourSum(int[] num, int target) {    ArrayList<List<Integer>>  result = new ArrayList<List<Integer>>();        Arrays.sort(num);        int n1,n2,n3,n4;        for(n1=0;n1<num.length-3&&num[n1]<=target/4;n1++){            for(n2=n1+1;n2<num.length-2;n2++){            n3=n2+1;    n4=num.length-1;    while(n3<n4){    if(num[n1]+num[n2]+num[n3]+num[n4]==target){    ArrayList<Integer> tmplist = new ArrayList<Integer>();    tmplist.add(num[n1]);    tmplist.add(num[n2]);    tmplist.add(num[n3]);    tmplist.add(num[n4]);    result.add(tmplist);    n3++;    while(num[n3]==num[n3-1]&&n3<n4) n3++;    }else if(num[n1]+num[n2]+num[n3]+num[n4]>target) n4--;    else n3++;    }            while(num[n2]==num[n2+1]&&(n2<(num.length-2))) n2++;             }            while(num[n1]==num[n1+1]&&n1<num.length-3) n1++;         }return result;     } }


0 0
原创粉丝点击