题目描述:
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
难度:中等
示例 1:
输入: nums = [-1,0,1,2,-1,-4]
输出: [[-1,-1,2],[-1,0,1]]
示例 2:
输入: nums = []
输出: []
示例 3:
输入: nums = [0]
输出: []
代码实现
//排序+双指针
threeSum(nums){
const ret = []
if(nums == null || nums.length < 3) return ret
nums.sort((a, b) => a-b)
const len = nums.length
for(let i = 0; i < len; i++){
if(nums[i] > 0) break; //当前项大于0的话直接结束循环,因为数组是有序的
if(i > 0 && nums[i] === nums[i-1]) continue //去重
let l = i+1, r=len-1;
while(l < r) {
let sum = nums[i] + nums[l] + nums[r]
if(sum === 0) {
ret.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 {
r--
}
}
}
return ret
}