Leetcode no. 18

来源:互联网 发布:mysql开启binlog日志 编辑:程序博客网 时间:2024/06/01 07:14

18. 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)
public class Solution {    public List<List<Integer>> fourSum(int[] nums, int target) {        List<List<Integer>> list= new LinkedList<>();        if (nums.length<4) return list;        Arrays.sort(nums);        for (int i = 0; i < nums.length-3; i++) {            if (i>0 && nums[i]== nums[i-1]) continue;            for (int j = i+1; j < nums.length-2; j++) {                if (j>i+1 && nums[j]== nums[j-1]) continue;                int subtarget= target-nums[i]-nums[j];                int m= j+1, n= nums.length-1;                while (m<n){                    if (nums[m]+nums[n]==subtarget) {                        list.add(Arrays.asList(nums[i], nums[j], nums[m], nums[n]));                        while (m < n && nums[m] == nums[m + 1]) m++;                        while (m < n && nums[n] == nums[n - 1]) n--;                        m++; n--;                    } else if (nums[m]+nums[n]<subtarget) m++;                    else n--;                }            }        }        return list;    }}


 

0 0