三数之和

 

 https://leetcode.cn/problems/3sum/

 

 

 

func threeSum(nums []int)[][]int{
    ans:=make([][]int,0)
    len:=len(nums)
    if len<3{
        return ans
    }
    sort.Ints(nums)
    for i:=0;i<len;i++{
        if nums[i]>0{// 如果当前数字大于0,则三数之和一定大于0,所以结束循环
            return ans
        }
        if i>0&&nums[i]==nums[i-1]{
            continue //去重
        }
        le:=i+1;ri:=len-1
        for le<ri{
            addSum:=nums[i]+nums[le]+nums[ri]
            if addSum==0{
                ans=append(ans,[]int{nums[i],nums[le],nums[ri]})
                for le<ri&&nums[le]==nums[le+1]{
                    le++ //去重
                }
                for le<ri&&nums[ri]==nums[ri-1]{
                    ri-- //去重
                }
                //指针偏移
                le++
                ri--
            }else if addSum<0{
                le++
            }else if addSum>0{
                ri--
            }
        }
    }
    return ans
}

 

posted @ 2022-06-21 17:59  知道了呀~  阅读(151)  评论(0编辑  收藏  举报