题目:
解题思路与答案
双for循环+双指针法
var fourSum = function(nums, target) {
let res = [];
let length = nums.length;
if(length < 4) return [];
nums.sort((a,b) => a - b);
//注意点:
//1.每一层都要去重
//2.sum的定义要放在while内部
for(var i = 0; i < length - 3; i++){
if(i > 0 && nums[i] === nums[i-1]) continue; //第一层for循环去重
for(var j = i + 1; j < length - 2; j++){
if(j > i + 1 && nums[j] === nums[j-1]) continue; 第二层for循环去重
let head = j + 1, end = length - 1; //内部双指针
while(head < end){
let sum = nums[i] + nums[j] + nums[head] + nums[end];
if(sum === target){
res.push([nums[i],nums[j],nums[head],nums[end]]);//下面是指针去重
while(head < end && nums[head] === nums[head + 1]){head++}
while(head < end && nums[end] === nums[end - 1]){end--}
head++;
end--;
}else if (sum < target){
head++;
}else {
end--;
}
}
}
}
return res;
};