给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。
示例:
给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
思路:先对数组nums进行排序,设置len为数组长度,设置i值为从0到len-2,left为i+1,right为len-1,然后这三个数相加为sum,如果nums[i]大于0则结束,如果sum<0,left++,sum>0.right--
var threeSum = function(nums) {
var len=nums.length;
var result=[]
nums.sort((x,y)=> x-y)//排序
for(let i=0;i<len-2;i++){
var left=i+1;
var right=len-1
if(nums[i]>0){//最小值大于0,结束
break;
}
if(i&&nums[i]==nums[i-1]){//防止重复
continue
}
while(left<right){
var sum=nums[left]+nums[i]+nums[right]
if(sum===0){
result.push([nums[left++],nums[i],nums[right--]])
while(nums[left]==nums[left-1]){//防止重复
left++
}
while(nums[right]===nums[right+1]){//防止重复
right--
}
}else if(sum>0){
right--;
}else {
left++;
}
}
}
return result
};