Go での整数スライスを使用した効率的なサブセット チェック
あるスライスが別のスライスのサブセットであるかどうかを判断することは、一般的なプログラミング タスクです。スライスを反復処理するのは単純なアプローチですが、より効率的な方法を検討することには価値があります。
効果的な解決策の 1 つは、マップ データ構造の利用です。この手法では、より大きなスライスの要素をキーとして、それぞれの周波数を値として持つマップを作成します。続いて、小さいスライスの要素がマップに対してチェックされます。すべての要素がマップ内で十分な頻度で見つかった場合、小さいスライスは大きいスライスのサブセットとみなされます。
Go での実装例:
<code class="go">package main import "fmt" func subset(first, second []int) bool { set := make(map[int]int) for _, value := range second { set[value]++ } for _, value := range first { if count, found := set[value]; !found { return false } else if count < 1 { return false } else { set[value]-- } } return true } func main() { fmt.Println(subset([]int{1, 2, 3}, []int{1, 2, 3, 4})) // true fmt.Println(subset([]int{1, 2, 2}, []int{1, 2, 3, 4})) // false }</code>
このアプローチでは、次の要素が効率的にチェックされます。 O(n) 時間でサブセットを作成します。ここで、n は大きい方のスライスの長さです。このようなシナリオでは一般的な要件である重複値を効果的に処理します。
以上がGo で整数スライスを使用してサブセットを効率的にチェックするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。