# (Java)LeetCode-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) {
Arrays.sort(nums);
List<List<Integer>> result = new ArrayList<List<Integer>>();
int length = nums.length;
int pre_i = Integer.MAX_VALUE;
for(int i = 0; i < length - 3; i++){
if(pre_i == nums[i]){
continue;
}
pre_i = nums[i];
if(4*nums[i] > target){
break;
}
int remain_target = target-nums[i];
if(nums[i] + 3*nums[i+1] > target || nums[i] + 3*nums[length-1] < target){
continue;
}
for(int j = i+1; j < length - 2; j++){
if(j > i+1 && nums[j-1]==nums[j]){
continue;
}
int m = j + 1;
int n = length-1;
int sub_target = target-nums[i]-nums[j];
while(m < n){
if(nums[m] + nums[n] == sub_target){
Integer[] temp = {nums[i],nums[j],nums[m],nums[n]};
while(++m < n && nums[m] == nums[m-1]);
while(m < --n && nums[n] == nums[n+1]);
}
else if(nums[m] + nums[n] < sub_target){
while(++m < n && nums[m] == nums[m-1]);
}else{
while(m < --n && nums[n] == nums[n+1]);
}
}
}
}
return result;
}
}

• 本文已收录于以下专栏：

## leetcode-Java-18. 4Sum

public class Solution { public List fourSum(int[] nums, int target) { List list = new Ar...
• github_34514750
• 2016年06月03日 18:18
• 390

## [leetcode-18]4Sum(java)

• zdavb
• 2015年07月28日 10:31
• 298

## LeetCode 18: 4Sum

Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = t...
• sunao2002002
• 2015年06月02日 22:00
• 2850

## 18.4Sum

4Sum  Total Accepted: 30705 Total Submissions: 143641My Submissions Question  Solution  Given...
• wscdylzjy
• 2015年04月04日 09:53
• 762

## 18. 4Sum

• aishangyutian12
• 2016年05月08日 15:21
• 192

## 18. 4Sum

Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = tar...
• sunnylinner
• 2016年04月13日 16:57
• 248

## 18. 4Sum

Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = tar...
• u013445530
• 2016年04月27日 11:46
• 625

## leetcode 18 -- 4Sum

4Sum 题目：Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c...
• wwh578867817
• 2015年06月04日 15:12
• 1061

## 18. 4Sum

class Solution { public: vector fourSum(vector& nums, int target) { int i,j,left,right; ...
• HE19930303
• 2016年05月10日 08:54
• 352

## LeetCode（18）4Sum

• fly_yr
• 2015年08月08日 18:12
• 911

举报原因： 您举报文章：(Java)LeetCode-18. 4Sum 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)