4Sum
Problem Description
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 < na,b,c, anddare distinct.nums[a] + nums[b] + nums[c] + nums[d] == target
You may return the answer in any order.
Example 1:
Input: nums = [1,0,-1,0,-2,2], target = 0 Output: [[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]
Example 2:
Input: nums = [2,2,2,2,2], target = 8 Output: [[2,2,2,2]]
Constraints:
1 <= nums.length <= 200-109 <= nums[i] <= 109-109 <= target <= 109
Solution (JavaScript)
/**
* @param {number[]} nums
* @param {number} target
* @return {number[][]}
*/
var fourSum = function(nums, target) {
var rtn = [];
if (nums.length < 4) {
return rtn;
}
nums = nums.sort(function(a, b) {
return a - b;
});
const res = new Set();
for (var m = 0; m < nums.length - 3; m++) {
for (var i = m + 1; i < nums.length - 2; i++) {
for (var j = i + 1, k = nums.length - 1; j < k;) {
if (nums[m] + nums[i] + nums[j] + nums[k] === target) {
const abcd = [nums[m], nums[i], nums[j], nums[k]];
res.add(abcd.sort().join(','));
j++;
k--;
} else if (nums[m] + nums[i] + nums[j] + nums[k] > target) {
k--;
} else {
j++;
}
}
}
}
rtn = [...res].map(abcd => abcd.split(',').map(e => parseInt(e)));
return rtn;
};