leetcode15 三数和

三数和用一层循环加指针

  1. 如果个数<3 个数等于3且和为0 直接返回操作
  2. 个数>3 先排序
  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))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值