在Go中使用切片进行子集检查

在Go中使用切片进行子集检查,第1张

在Go中使用切片进行子集检查

我认为解决子集问题的最常见方法是通过地图。

package mainimport "fmt"// subset returns true if the first array is completely// contained in the second array. There must be at least// the same number of duplicate values in second as there// are in first.func subset(first, second []int) bool {    set := make(map[int]int)    for _, value := range second {        set[value] += 1    }    for _, value := range first {        if count, found := set[value]; !found { return false        } else if count < 1 { return false        } else { set[value] = count - 1        }    }    return true}func main() {    fmt.Println(subset([]int{1, 2, 3}, []int{1, 2, 3, 4}))    fmt.Println(subset([]int{1, 2, 2}, []int{1, 2, 3, 4}))}

检查重复值的能力相对罕见。上面的代码按要求解决了问题(请参阅:http :
//play.golang.org/p/4_7Oh-fgDQ)。如果您打算使用重复的值,则必须像上面的代码一样保留一个计数。如果没有重复的值,则可以通过使用布尔值(而不是整数)来更紧凑地解决问题。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5125831.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存