题目: 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。
注意: 答案中不可以包含重复的三元组。
[leetcode题目链接](leetcode.cn/problems/3s…
我的JavaScript解法
/**
* @param {number[]} nums
* @return {number[][]}
*/
var threeSum = function(nums) {
const result = []
const length = nums.length
if (nums == null || length < 3)
return result
nums.sort((a, b) => a -b) // 排序
for (let i = 0; i < length-2; i++) {
if (nums[i] >0) break; // 最小的数大于零,剔除
if (i > 0 && nums[i] == nums[i-1])
continue; // 第一个数和上一次循环的一个数相等,去重
let left = i + 1, right = length - 1;
while (left < right) {
const sum = nums[i] + nums[left] + nums[right]
if (sum == 0) {
result.push([nums[i], nums[left], nums[right]])
while(nums[left] == nums[left+1]) left++; // 第二个数去重
while(nums[right] == nums[right-1]) right--; // 第三个数去重
left++;
right--;
} else if (sum < 0) {
left ++
} else if (sum > 0) {
right--
}
}
}
return result;
};
解析: 排序+双指针 参考画手大鹏的解析
- 时间复杂度: 排序时间 + for调用while =
- 空间复杂度: