let nums = [0, 0, 0, 0, 0, 1]
let n = nums.length;
nums = Array.from(nums.sort((a, b) => a - b))
let res = []
// 枚举 a
for (let i = 0; i < n; ++i) {
// 第一次去重
if (i > 0 && nums[i] == nums[i - 1]) {
continue;
}
let k = n - 1;
// 枚举 b
for (let j = i + 1; j < n; ++j) {
// 第二次去重
if (j > i + 1 && nums[j] == nums[j - 1]) {
continue;
}
while (j < k && nums[j] + nums[k] + nums[i] !== 0) {
//目的是定位第三个数的位置
--k;
}
// 如果指针重合,随着 b 后续的增加
// 就不会有满足 a+b+c=0 并且 b<c 的 c 了,可以退出循环
if (j == k) {
break;
}
if (nums[k] + nums[j] + nums[i] === 0) {
res.push([nums[i], nums[j], nums[k]]);
}
}
}
console.log(res);
leetcode三数之和【双指针】
最新推荐文章于 2025-10-24 13:08:38 发布
本文解析了一段使用Python实现的代码,该代码通过双指针法解决数组中是否存在三个数之和为零的问题。首先对数组进行排序并去重,然后使用两个指针遍历数组,寻找符合条件的三元组。这种方法巧妙地利用了排序和数组特性来简化搜索过程。
5449

被折叠的 条评论
为什么被折叠?



