Open lxw124 opened 4 years ago
可以先对数组进行排序,然后从左边开始选择一个元素,这个元素必须是为负数,然后在这个元素后面设置左右指针两指针往中间移动,如果两指针和前面那个数相加为0则返回
var threeSum = function(nums) {
var arr=[]
nums.sort((x,y)=>x-y);
for(let i=0;i<nums.length-2;i++){
var left=i+1;
var right=nums.length-1
var x=nums[i];
if(nums[i]>0){break;}
if(i&&nums[i]==nums[i-1]){continue}
var len=nums.length;
while(left<right){
var sum=x+nums[left]+nums[right]
if(sum==0){
arr.push([x,nums[left++],nums[right--]])
while(nums[left]==nums[left-1]){
left++;
}
while(nums[right]==nums[right+1]){
right--;
}
}else if(sum>0){right--}
else{left++}
}
}
return arr;
}
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例:
给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ]