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的数字组合的主要内容,如果未能解决你的问题,请参考以下文章
给定一个长度为N的数组,找出出现次数大于n/2,n/3的数,要求时间复杂度O(n),空间复杂度O