leetcode15.三数之和

Problem: 15. 三数之和

思路

重点在于第一个数不能为正数,第二第三个数通过滑动窗口找到

Code

func threeSum(nums []int) [][]int {
    result:=make([][]int,0)
    sort.Ints(nums)
    numsLength:=len(nums)

    for i:=0;i<numsLength-2;i++{
        n1:=nums[i]
        //如果n1大于0,不需要往下执行,因为不可能有三数之和等于零
        if n1>0{
            break
        }
        //如果i大于0,但是和之前的数相同,i继续累加
        if i>0{
            if n1==nums[i-1]{
                continue
            }
        }
        l,r:=i+1,numsLength-1

        for l<r{
            n2,n3:=nums[l],nums[r]
            temp:=n1+n2+n3
            if temp==0{
                result=append(result,[]int{n1,n2,n3})
                for l<r&&n2==nums[l]{
                    l++
                }
                for l<r&&n3==nums[r]{
                    r--
                }
            }else{
                if temp>0{
                    r--
                }else{
                    l++
                }
                
            }
        }
        
    }
    return result

}

Last updated