?
var threeSum = function(nums) {
let res = [];
//长度不够直接返回
if(nums.length < 3)return res;
nums = nums.sort(function(a,b){
return a - b;
});
//k,p,q, 用k 遍历 , pq找答案
for(let k = 0; k < nums.length - 2; k++){
//如果k和前一个一样,k++,因为要去重答案,去重k
if(k > 0 && nums[k] == nums[k - 1])continue;
let p = k + 1, q = nums.length - 1;
while(q - p > 0){
if(nums[k] + nums[p] + nums[q] == 0){
res.push([nums[k] , nums[p] , nums[q]]);
p++;
q--;
//要去重答案,去重pq
while(nums[p] == nums[p - 1])p++;
while(nums[q] == nums[q + 1])q--;
}else if(nums[k] + nums[p] + nums[q] < 0){//和<0就要变大p就要后移
p++;
}else{
q--;
}
}
}
return res;
};
|