ホームページ  >  記事  >  バックエンド開発  >  Go でマップを使用して、整数の 1 つのスライスが別の整数のサブセットであるかどうかを効率的に判断するにはどうすればよいですか?

Go でマップを使用して、整数の 1 つのスライスが別の整数のサブセットであるかどうかを効率的に判断するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-27 08:11:31831ブラウズ

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

Map を使用した Go の整数スライスのサブセット チェック

整数の 1 つのスライスが別の整数のサブセットであるかどうかを判断するには、単純ではない効率的なソリューションが必要です反復。この記事では、マップを利用してチェックを最適化するソリューションを紹介します。

サブセット定義

スライスにすべての要素が含まれている場合、スライスは別のスライスのサブセットとみなされます。後者には重複が含まれる可能性があります。たとえば、{1, 2, 3} は {1, 2, 3, 4} のサブセットですが、{1, 2, 2} は {1, 2, 3, 4} のサブセットではありません。

マップベースの実装

提供されるソリューションでは、マップを使用して、スライスがサブセットであるかどうかを効率的に判断します。各要素のカウントを値として使用して、2 番目のスライスからマップを構築します。続いて、最初のスライスを反復処理して、マップ内の各要素の存在を確認します。すべての要素が十分な重複で見つかった場合、最初のスライスはサブセットとみなされます。

サンプル コード

<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>

出力

true
false

結論

このマップベースのソリューションは、ある整数スライスが別の整数スライスのサブセットであるかどうかを効率的に判断し、潜在的な重複値を処理します。 Go におけるこの一般的な問題を解決するための最適化されたアプローチを提供します。

以上がGo でマップを使用して、整数の 1 つのスライスが別の整数のサブセットであるかどうかを効率的に判断するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。