Given an array nums
of n integers and an integer target
, are there elements a, b, c, and d in nums
such that a + b + c + d = target
? Find all unique quadruplets in the array which gives the sum of target
.
Note:
The solution set must not contain duplicate quadruplets.
Example:
Given array nums = [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] ]
和3sum几乎一样
class Solution { public List<List<Integer>> fourSum(int[] nums, int target) { List<List<Integer>> results = new ArrayList<>(); if(nums.length < 4) return results; 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 left = j + 1, right = nums.length - 1; while(left < right){ if(target == nums[i] + nums[j]+nums[left]+nums[right]){ List<Integer> result = Arrays.asList(nums[i],nums[j], nums[left], nums[right]); results.add(result); while(left < right && nums[left]==nums[left+1]) left++; while(left < right && nums[right]==nums[right-1]) right--; left++; right--; } else if(target < nums[i] + nums[j]+nums[left]+nums[right]){ right--; } else{ left++; } } } } return results; } }