Given an arraySofnintegers, are there elementsa,b,c, anddinSsuch thata+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.
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]
]
还是2 pointer,O(n^3)
publicArrayList<ArrayList<Integer>>fourSum(int[] numbers,int target) {ArrayList<ArrayList<Integer>> res =newArrayList<>();if (numbers ==null||numbers.length==0) {return res; }Arrays.sort(numbers);int len =numbers.length;for (int i =0; i < len -3; i++) {if (i !=0&& numbers[i] == numbers[i -1]) { // remove dupcontinue; }for (int j = i +1; j < len -2; j++) {if (j != i +1&& numbers[j] == numbers[j -1]) { // remove dupcontinue; }int left = j +1;int right = len -1;while (left < right) {int sum = numbers[i] + numbers[j] + numbers[left] + numbers[right];if (sum == target) {ArrayList<Integer> tmp =newArrayList<>();tmp.add(numbers[i]);tmp.add(numbers[j]);tmp.add(numbers[left]);tmp.add(numbers[right]);res.add(tmp); left++; right--;// remove dupwhile (left < right && numbers[left] == numbers[left -1]) { left++; }// remove dupwhile (left < right && numbers[right] == numbers[right +1]) { right--; } } elseif (sum > target) { right--; } else { left++; } } } }return res;}