使用雙指標法判斷給定子陣列是否存在於給定陣列中的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 語言程式,該程式使用雙指標法判斷給定子陣列是否存在於給定陣列中,並附帶兩個示例。在第一個示例中,我們使用了迭代方法,在第二個示例中,我們使用了最佳化迭代方法。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP