Maison  >  Article  >  développement back-end  >  Comment puis-je déterminer efficacement si une tranche d'entiers est un sous-ensemble d'une autre dans Go à l'aide d'une carte ?

Comment puis-je déterminer efficacement si une tranche d'entiers est un sous-ensemble d'une autre dans Go à l'aide d'une carte ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-27 08:11:31831parcourir

How can I efficiently determine if one slice of integers is a subset of another in Go using a map?

Vérification de sous-ensemble avec des tranches entières dans Go à l'aide de Map

Déterminer si une tranche d'entiers est un sous-ensemble d'une autre nécessite une solution efficace au-delà du simple itération. Cet article présente une solution qui utilise une carte pour optimiser la vérification.

Définition du sous-ensemble

Une tranche est considérée comme un sous-ensemble d'une autre si elle contient tous les éléments de la ce dernier, avec l'inclusion éventuelle de doublons. Par exemple, {1, 2, 3} est un sous-ensemble de {1, 2, 3, 4}, tandis que {1, 2, 2} n'est pas un sous-ensemble de {1, 2, 3, 4}.

Implémentation basée sur une carte

La solution fournie utilise une carte pour déterminer efficacement si une tranche est un sous-ensemble. Il construit une carte à partir de la deuxième tranche, avec le nombre de chaque élément comme valeur. Par la suite, il parcourt la première tranche et vérifie la présence de chaque élément dans la carte. Si tous les éléments sont trouvés avec suffisamment de doublons, la première tranche est considérée comme un sous-ensemble.

Exemple de code

<code class="go">import "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]++
    }

    for _, value := range first {
        if count, ok := set[value]; !ok {
            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}))
}</code>

Sortie

true
false

Conclusion

Cette solution basée sur une carte détermine efficacement si une tranche entière est un sous-ensemble d'une autre, en gérant les valeurs en double potentielles. Il fournit une approche optimisée pour résoudre ce problème courant dans Go.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn