在Go(Golang)中查找数组中三个数值加起来为0的的方法

61 阅读1分钟

概述

比方说,输入是

[-3, 0, 3, 4, -1, -6]

那么答案将是

[[-3 0 3] [-3 4 -1]]

我们可以使用哈希值来解决这个问题。它是基于以下的想法

  • 如果其中两个数字是xy

  • 那么另一个数字将是**-(x+y)**

程序

package main

import (
    "fmt"
)

func main() {
    output := threeSumZero([]int{-3, 0, 3, 4, -1, -6})
    fmt.Println(output)
}

func threeSumZero(nums []int) [][]int {
    numsLength := len(nums)
    var results [][]int
    for k := 0; k < numsLength-2; k++ {
        numsMap := make(map[int]int)
        for i := k + 1; i < numsLength; i++ {
            if numsMap[0-(nums[i]+nums[k])] > 0 {
                result := []int{nums[k], 0 - (nums[i] + nums[k]), nums[i]}
                results = append(results, result)
            }
            numsMap[nums[i]] = i
        }
    }
    return results
}

输出

[[-3 0 3] [-3 4 -1]]