golang一个无序数组中两个数之和等于给定的值sum

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_45604257/article/details/102686154

【问题描述】

给定一个数组,求两个数之和=给定值sum的所有组合个数。

【变形】两个数之和=sum的任意一组数

【方法一】穷举法

从数组中任意找两个数,看其和是否=sum。时间复杂度O(N^2)

【方法二】hash表法
只需要遍历一遍数组,非常高效
思路:定义一个map,一开始为空,不存数据,开始遍历数组,判断第一个元素是否有另一半已经在map中,如果有count++,没有的话,把第一个元素存入map;继续遍历第二个元素,判断第二个元素是否有另一半已经在map中,如果有count++,没有的话,把第二个元素存入map…遍历结束,结果也出来了

package main

import (
	"fmt"
)

func getSumNum(arr []int, sum int) int {
	tp := make(map[int]int)
	var count int

	for i := 0; i <= len(arr)-1; i++ {
		if _, ok := tp[sum-arr[i]]; ok {
			count++
		} else {
			tp[arr[i]] = i
		}

	}
	return count
}

func main() {
	var brr []int = []int{1, 12, 14, 40, 56, 60, 88, 78, 99}
	var sum int = 100
	fmt.Println(getSumNum(brr, sum))
}
//结果:3

猜你喜欢

转载自blog.csdn.net/weixin_45604257/article/details/102686154