4Sum
Description
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] ]
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;
};