在Go(Golang)中寻找数组中两个数字相加为目标数字的方法

89 阅读1分钟

概述

例如,假设我们有一个给定的数组

[2, 5, 1, 3]

目标数字是4

那么答案将是索引

[2, 3]

因为我们有

  • 数字1在索引2处

  • 数字3在索引3处

而1+3=4

请注意,这个数组是没有排序的

预期的TC - O(n)

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

  • 如果说其中一个数字是x

  • 那么另一个数字将是目标-x

因此,如果对于一个数字x ,我们检查目标-x是否在哈希中。如果是,我们就知道我们有了解决方案。

让我们看看同样的程序。

程序

package main

import "fmt"

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

func twoTargetSums(nums []int, target int) []int {
	numberMap := make(map[int]int)
	output := make([]int, 2)
	for i := 0; i < len(nums); i++ {
		val, ok := numberMap[target-nums[i]]
		if ok {
			output[0] = val
			output[1] = i
			return output
		} else {
			numberMap[nums[i]] = i
		}
	}
	return output
}

输出

[2 3]