使用雙指標方法查詢陣列中是否存在兩個數字之和等於給定目標和的 Golang 程式


在這篇 Golang 文章中,我們將使用迭代和最佳化迭代方法,透過雙指標方法查詢陣列中是否存在兩個數字之和等於給定目標和。陣列是由相同資料型別元素組成的集合,這些元素排列在記憶體的連續塊中,並使用索引或下標進行訪問。

使用迭代方法的雙指標方法

在這種方法中,我們將定義一個使用迭代方法的 pairWithGivenSum() 函式,用於使用雙指標方法查詢陣列中是否存在兩個數字之和等於給定目標和。

演算法

  • 步驟 1 − 首先,我們需要匯入 fmt 包。

  • 步驟 2 − 現在,建立一個 pairWithGivenSum() 函式,該函式接收一個整數陣列和一個目標和值作為輸入。此函式將查詢陣列中是否存在兩個數字之和等於給定目標和。

  • 步驟 3 − 它使用兩個指標 left 和 right 來跟蹤陣列的起始和結束索引。

  • 步驟 4 − 然後,它透過將這些指標處的元素之和與目標和進行比較來向內移動指標。

  • 步驟 5 − 如果和小於目標和,則左指標向右移動。如果和大於目標和,則右指標向左移動。

  • 步驟 6 − 如果存在兩個元素之和等於目標和,則函式返回 true;如果不存在這樣的對,則返回 false。

  • 步驟 7 − 啟動 main() 函式。在 main() 函式內部,初始化一個數組並提供整數目標和值。

  • 步驟 8 − 現在,呼叫 pairWithGivenSum() 函式並將陣列和和作為引數傳遞給它。

  • 步驟 9 − 此外,使用 fmt.Println() 函式列印使用雙指標方法查詢陣列中是否存在兩個數字之和等於給定目標和的結果。

示例

以下是使用迭代方法的雙指標方法查詢陣列中是否存在兩個數字之和等於給定目標和的 Go 語言程式

package main

import "fmt"

func pairWithGivenSum(arr []int, targetSum int) bool {
   left, right := 0, len(arr)-1

   for left < right {
      sum := arr[left] + arr[right]
      if sum == targetSum {
         return true
      } else if sum < targetSum {
         left++
      } else {
         right--
      }
   }
   return false
}

func main() {
   arr := []int{10, 40, 30, 80, 50}
   targetSum := 70

   if pairWithGivenSum(arr, targetSum) {
      fmt.Println("There exists a pair of numbers in the array that add up to sum", targetSum)
   } else {
      fmt.Println("There does not exist a pair of numbers in the array that add up to sum", targetSum)
   }
}

輸出

There exists a pair of numbers in the array that add up to sum 70

使用最佳化迭代方法的雙指標方法

在這種方法中,我們將以最佳化方式定義一個使用迭代方法的 pairWithGivenSum() 函式,用於使用雙指標方法查詢陣列中是否存在兩個數字之和等於給定目標和。

演算法

  • 步驟 1 − 首先,我們需要匯入 fmt 包。

  • 步驟 2 − 現在,建立一個 pairWithGivenSum() 函式,該函式接收一個整數陣列和一個目標和值作為輸入。此函式將查詢陣列中是否存在兩個數字之和等於給定目標和,並返回布林值。

  • 步驟 3 − 它在陣列的開頭和結尾初始化兩個指標 left 和 right。

  • 步驟 4 − 然後,將 left 和 right 指標處的元素之和與目標和進行比較。如果和小於目標和,則它遞增左指標。如果和大於目標和,則它遞減右指標。

  • 步驟 5 − 函式繼續指示不存在任何兩個元素之和等於目標和,或者直到找到兩個元素之和等於目標和並返回 true。

  • 步驟 6 − 啟動 main() 函式。在 main() 函式內部,初始化一個數組並提供整數目標和值。

  • 步驟 7 − 現在,呼叫 pairWithGivenSum() 函式並將陣列和和作為引數傳遞給它。

  • 步驟 8 − 此外,使用 fmt.Println() 函式列印使用雙指標方法查詢陣列中是否存在兩個數字之和等於給定目標和的結果。

示例

以下是使用最佳化迭代方法的雙指標方法查詢陣列中是否存在兩個數字之和等於給定目標和的 Go 語言程式

package main

import "fmt"

func pairWithGivenSum(arr []int, targetSum int) bool {
   var left, right int
   for left < right {
      if arr[left]+arr[right] == targetSum {
         return true
      } else if arr[left]+arr[right] < targetSum {
         left++
      } else {
         right--
      }
   }
   return false
}

func main() {
   arr := []int{10, 40, 30, 80, 50}
   targetSum := 7

   if pairWithGivenSum(arr, targetSum) {
      fmt.Printf("There exists a pair of numbers in the array that add up to %d\n", targetSum)
   } else {
      fmt.Printf("There does not exist a pair of numbers in the array that add up to %d\n", targetSum)
   }
}

輸出

There does not exists a pair of numbers in the array that add up to 7

結論

我們已經成功編譯並執行了一個 Go 語言程式,該程式使用迭代和最佳化迭代方法的雙指標方法查詢陣列中是否存在兩個數字之和等於給定目標和,並附帶兩個示例。在第一個示例中,我們使用了迭代方法,在第二個示例中,我們使用了最佳化迭代方法。

更新於: 2023年4月3日

262 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.