golang:给定一个数字切片,用时间复杂度为O(n)的算法找出所有和为10的数字组合

Posted IGuoSJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang:给定一个数字切片,用时间复杂度为O(n)的算法找出所有和为10的数字组合相关的知识,希望对你有一定的参考价值。

golang:给定一个数字切片,用时间复杂度为O(n)的算法找出所有和为10的数字组合

input: [1, 3, 4, 7, 8, 6]
output: 3 and 7; 4 and 6

代码示例:

package main

import "fmt"

func main() 
	inputSlice := []int1, 3, 4, 7, 8, 6
	numMap := map[int]int
	for _, num := range inputSlice 
		numMap[num] = num
	
	for _, num := range inputSlice 
		if anotherNum, exist := numMap[10-num]; exist 
			fmt.Printf("%d and %d;", num, anotherNum)
		
	

执行输出结果:

3 and 7;4 and 6;7 and 3;6 and 4;

可以看到初步的输出结果,但离我们想要的结果还有差距,主要是存在重复的情况
进一步的优化代码如下:

package main

import "fmt"

func getPair()
	sum := 10
	inputSlice := []int1, 3, 4, 7, 8, 6
	numMap := map[int]int
	retMap := map[int]int
	for _, num := range inputSlice 
		numMap[num] = num
	
	for _, num := range inputSlice 
		if anotherNum, exist := numMap[sum-num]; exist 
			if _, exist := retMap[anotherNum]; !exist 
				retMap[num] = anotherNum
			
			//fmt.Printf("%d and %d;", num, anotherNum)
		
	
	for k, v := range retMap 
		fmt.Printf("%d and %d;", k, v)
	


func main() 
	getPair()

执行输出结果:

3 and 7;4 and 6;

将数字组合另存一个map中,来控制重复的情况

以上是关于golang:给定一个数字切片,用时间复杂度为O(n)的算法找出所有和为10的数字组合的主要内容,如果未能解决你的问题,请参考以下文章

goLang实现不同类型的切片间互转

给定一个长度为N的数组,找出出现次数大于n/2,n/3的数,要求时间复杂度O(n),空间复杂度O

golang 使用Go查找给定切片中的最大字符串数

数组中的两个不同数字,它们的和等于给定值

菜鸟系列 Golang 实战 Leetcode —— 300. 最长上升子序列

给定一个数组,求如果排序之后,相邻两数的最大差值,要求时 间复杂度O(N),且要求不能用非基于比较的排序