在Go 中使用Map 對整數切片進行子集檢查
確定一個整數切片是否是另一個整數切片的子集需要一種高效的解決方案,而不僅僅是簡單的解決方案迭代。本文介紹了一種利用映射來優化檢查的解決方案。
子集定義
如果一個切片包含另一個切片的所有元素,則該切片被視為另一個切片的子集後者,可能包含重複項。例如,{1, 2, 3} 是 {1, 2, 3, 4} 的子集,而 {1, 2, 2} 不是 {1, 2, 3, 4} 的子集。
基於地圖的實現
提供的解決方案使用地圖來有效地確定切片是否是子集。它從第二個切片建構一個映射,其中每個元素的計數作為值。隨後,它迭代第一個切片並驗證映射中每個元素的存在。如果所有元素都找到足夠的重複項,則第一個切片被視為子集。
範例程式碼
<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 中,如何使用映射有效地確定一個整數切片是否是另一個整數切片的子集?的詳細內容。更多資訊請關注PHP中文網其他相關文章!