Skip to content

Latest commit

 

History

History
48 lines (43 loc) · 1.13 KB

15.md

File metadata and controls

48 lines (43 loc) · 1.13 KB

3 sums

解法一

排序 + 双指针 + 这也是解决3sum的标准的做法。

func threeSum(nums []int) [][]int {
    if nums == nil {
        return [][]int{}
    }
    sort.Ints(nums) // 排序
    result := [][]int{}
    for k,v := range nums {
        if k == len(nums)-2 {
            break
        }
        if k >0 && nums[k] == nums[k-1] {
           continue
        }

        l,r := k+1,len(nums)-1 // 在剩余的子数组中,使用两个指针来分别代表最左端和最右端
        for l< r {
            value := nums[l]+nums[r]+v
            if value >0 {
                r--
            }else if value <0  {
                l++
            }else {
                value := []int{nums[l],nums[r],v}
                result =append(result,value)
                for l < r &&nums[l] == nums[l+1]{
                    l++
                    }
                for l < r && nums[r] == nums[r-1]{
                    r--
                    }
                l++
                r--
            }   
        }
    }
    return result
}

解法二

可以使用一个hash 不过我没有找到很好的关于去重的做法