使用雙指標法判斷給定子陣列是否存在於給定陣列中的Go語言程式
在這篇Go語言文章中,我們將學習如何使用雙指標法,結合迭代和最佳化迭代方法,判斷給定子陣列是否存在於給定陣列中。陣列是由相同資料型別元素組成的集合,這些元素排列在連續的記憶體塊中,並使用索引或下標訪問。
語法
func isSubarrayPresent(arr []int, sub []int) bool {…}
isSubarrayPresent() 函式用於使用雙指標法判斷給定子陣列是否存在於給定陣列中。它接受陣列和子陣列作為引數。
演算法
步驟1 − 首先,我們需要匯入 fmt 包。
步驟2 − 現在,建立一個 isSubarrayPresent() 函式,該函式接受整數型別的陣列和子陣列。此函式將返回一個布林值,指示子陣列是否存在於陣列中。
步驟3 −
示例1 −
如果子陣列的長度為零,這意味著它是空的,並且存在於任何陣列中。在這種情況下,返回 true。否則,使用 for 迴圈使用某些條件將子陣列的元素與陣列的元素進行匹配。如果子陣列的所有元素都存在於陣列中,則返回 true,否則返回 false。
示例2 −
它首先檢查子陣列的長度是否大於陣列的長度,如果大於,則返回 false。否則,使用帶有 if-else 條件的 for 迴圈,使用某些條件將子陣列的元素與陣列的元素進行匹配。如果匹配,則函式遞增 j 以繼續處理子陣列的下一個元素。如果沒有匹配,則函式將 j 重置為零,並遞增 i 以繼續處理陣列的下一個元素。如果子陣列的所有元素都存在於陣列中,則返回 true,否則返回 false。
步驟4 − 啟動 main() 函式。在 main() 函式中,初始化陣列和子陣列。
步驟5 − 現在,呼叫 isSubarrayPresent() 函式並將陣列和子陣列傳遞給它。
步驟6 − 此外,使用 fmt.Println() 函式列印結果布林值。
示例1
在這個示例中,我們將使用迭代方法定義一個 isSubarrayPresent() 函式,該函式用於使用雙指標法判斷給定子陣列是否存在於給定陣列中。
package main import "fmt" func isSubarrayPresent(arr []int, sub []int) bool { if len(sub) == 0 { return true } i := 0 j := 0 for i < len(arr) { if arr[i] == sub[j] { j++ if j == len(sub) { return true } } else { i -= j j = 0 } i++ } return false } func main() { arr := []int{1, 2, 3, 4, 5, 6, 7, 8, 9} sub1 := []int{2, 3, 4} sub2 := []int{4, 3, 2} sub3 := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} fmt.Println(isSubarrayPresent(arr, sub1)) fmt.Println(isSubarrayPresent(arr, sub2)) fmt.Println(isSubarrayPresent(arr, sub3)) }
輸出
true false false
示例2
在這個示例中,我們將以最佳化的方式使用迭代方法定義一個 isSubarrayPresent() 函式,該函式用於使用雙指標法判斷給定子陣列是否存在於給定陣列中。
package main import "fmt" func isSubarrayPresent(arr []int, sub []int) bool { n := len(arr) m := len(sub) if m > n { return false } i := 0 j := 0 for i < n && j < m { if arr[i] == sub[j] { j++ } else if j > 0 && arr[i] == sub[j-1] { j-- continue } else { i = i - j j = 0 } i++ } return j == m } func main() { arr := []int{10, 20, 30, 40, 50, 60, 70, 80, 90} s1 := []int{40, 50, 9} s2 := []int{5, 2, 10} s3 := []int{10, 20, 30, 40, 50} fmt.Println(isSubarrayPresent(arr, s1)) fmt.Println(isSubarrayPresent(arr, s2)) fmt.Println(isSubarrayPresent(arr, s3)) }
輸出
false false true
結論
我們已經成功編譯並執行了一個 Go 語言程式,該程式使用雙指標法判斷給定子陣列是否存在於給定陣列中,並附帶兩個示例。在第一個示例中,我們使用了迭代方法,在第二個示例中,我們使用了最佳化迭代方法。