four-sum
Question
Given an array nums of n integers, return an array of all the unique quadruplets [nums[a], nums[b], nums[c], nums[d]] such that:
0 <= a, b, c, d < n a, b, c, and d are distinct. nums[a] + nums[b] + nums[c] + nums[d] == target You may return the answer in any order.
input:
Input: nums = [1,0,-1,0,-2,2], target = 0
Output:
Output: [[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]
Solution
For our solution to this problem, we can base it off of our solution for our three sum problem.
Javascript
var fourSum = function (arr, target) {
quadruplets = [];
arr.sort((a, b) => a - b);
for (let i = 0; i < arr.length - 3; i++) {
if (i > 0 && arr[i] === arr[i - 1]) continue;
helper(arr, i, i + 1, target, quadruplets);
}
return quadruplets;
};
const helper = (arr, first, second, target, quadruplets) => {
for (let i = second; i < arr.length - 2; i++) {
if (i > second + 1 && arr[i] === arr[i - 1]) continue;
let p1 = i + 1;
let p2 = arr.length - 1;
while (p1 < p2) {
let currentSum = arr[first] + arr[i] + arr[p1] + arr[p2];
if (currentSum === target) {
quadruplets.push([arr[first], arr[i], arr[p1], arr[p2]]);
while (arr[p1] === arr[p1 - 1]) p1++;
while (arr[p2] === arr[p2 + 1]) p2--;
p1++;
p2--;
} else if (currentSum < target) {
p1++;
} else {
p2--;
}
}
}
return quadruplets;
};
Java
Concepts
Patterns
- Two Pointer