使用雙指標法判斷給定子陣列是否存在於給定陣列中的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 語言程式,該程式使用雙指標法判斷給定子陣列是否存在於給定陣列中,並附帶兩個示例。在第一個示例中,我們使用了迭代方法,在第二個示例中,我們使用了最佳化迭代方法。

更新於:2023年4月3日

373 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告