在Go(Golang)中查找数组中数字是目标和的三倍数的方法

85 阅读1分钟

概述

比方说,输入是

[1, 2, 3, 4, 1]

那么答案将是

[[1 2 3] [1 4 1] [2 3 1]]

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

  • 如果其中两个数字是xy ,目标和是target

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

程序

package main

import (
	"fmt"
)

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

func threeSumTarget(nums []int, target 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[target-(nums[i]+nums[k])] > 0 {
				result := []int{nums[k], target - (nums[i] + nums[k]), nums[i]}
				results = append(results, result)
			}
			numsMap[nums[i]] = i
		}
	}

	return results
}

输出

[[1 2 3] [1 4 1] [2 3 1]]