给定一个包含 n 个整数的数组 nums
,判断 nums
中是否存在三个元素 a,b,c ,使得 _a + b + c = _0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
var threeSum = function(nums) {
const result = [];
if (nums.length < 3) {
return result;
}
// 先排序
nums = nums.sort((a, b) => a - b);
for (let i = 0; i < nums.length - 2; i++) {
// i作为左指针 [...2,2,3...] 指向第2个2时 已经处理过有一个数是2的情况了 跳过
if(i > 0 && nums[i] === nums[i-1]) {
continue
}
let j = i + 1;
let k = nums.length - 1;
// j向后、k向前
while(j < k) {
const temp = nums[i] + nums[j] + nums[k];
if (temp === 0) {
result.push([nums[i], nums[j], nums[k]]);
// 避免重复
while(nums[j] === nums[j + 1]) {
j++
}
while(nums[k] === nums[k-1]) {
k--
}
j++
k--
} else if (temp < 0) {
j++
} else {
k--
}
}
}
return result;
};