微信公众号:醉前端
关注可了解更多解题技巧。问题或建议,请公众号留言;
题目
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。
- 示例 1:
给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:
[[-1, 0, 1],[-1, -1, 2]]
答案
- 解法1:
const threeSum = (nums) => {
let ans = [];
const len = nums.length;
if(nums == null || len < 3) return null;
nums.sort((a, b) => a - b); // 排序
for (let i = 0; i < len ; i++) {
if(nums[i] > 0) break;
if(i > 0 && nums[i] === nums[i-1]) continue;
let L = i+1;
let R = len-1;
while(L < R){
const sum = nums[i] + nums[L] + nums[R];
if(sum == 0){
ans.push([nums[i],nums[L],nums[R]]);
while (L<R && nums[L] == nums[L+1]) L++;
while (L<R && nums[R] == nums[R-1]) R--;
L++;
R--;
}else if (sum < 0){
L++;
}else if (sum > 0){
R--;
}
}
}
return ans;
};
每日更新一道算法题,加个关注呗老铁!
![]()
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。