三数和用一层循环加指针
- 如果个数<3 个数等于3且和为0 直接返回操作
- 个数>3 先排序
- 一层循环,相当于指针1,去重
4.存储指针left,指针right
5.如果外层循环+left+right=sum=0,加入result left,right去重 left++ right–
6.sum<0,left++ sum>0 right–
7.直到left<right,继续i++
8.返回result
var threeSum = function(nums) {
let result=[]
let length=nums.length
if(length<3) return result
if(length==3){
if(nums[0]+nums[1]+nums[2]==0){
result.push([nums[0],nums[1],nums[2]])
return result
}
else
return result
}
nums=nums.sort((a,b)=>{
return a-b
})
//一层循环加双指针
for (let i = 0; i < length; i++) {
if(i>0 && nums[i]==nums[i-1]) continue
let left=i+1
let right=length-1
while (left<right){
let sum=nums[i]+nums[left]+nums[right]
if(sum==0){
result.push([nums[i],nums[left],nums[right]])
while(left<right && nums[left]==nums[left+1]) left++
while(left<right && nums[right]==nums[right-1]) right--
left++
right--
}else if(sum>0) right--
else if(sum<0) left++
}
}
return result
};
nums = [-1,0,1,2,-1,-4]
console.log(threeSum(nums))