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 サイトの他の関連記事を参照してください。