使用雙指標法在Go語言程式中查詢陣列中兩個數字的最大乘積


在這篇 Go 語言文章中,我們將學習如何使用迭代法和最佳化迭代法,透過雙指標法在陣列中找到兩個數字的最大乘積。陣列是由相同資料型別元素組成的集合,它們排列在連續的記憶體塊中,並使用索引或下標訪問。

使用迭代法的雙指標法

在這個方法中,我們將定義一個 `productMax()` 函式,使用迭代法透過雙指標法在陣列中找到兩個數字的最大乘積。

演算法

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

  • 步驟 2 − 現在,建立一個 `productMax()` 函式,它接收一個整數陣列作為引數。此函式將返回一個整數,表示陣列中兩個數字的最大乘積。

  • 步驟 3 − 此函式首先對陣列進行排序,並初始化兩個指標 `left` 和 `right`。`left` 指標指向已排序陣列的第一個元素,而 `right` 指標指向已排序陣列的最後一個元素。

  • 步驟 4 − 在每次迭代中,`left` 和 `right` 指標指向的數字相乘,並將它們的乘積儲存在一個名為 `prod` 的變數中。如果 `prod` 的值大於 `prodMax`,則更新 `prodMax` 的值。

  • 步驟 5 − 開始 `main()` 函式。在 `main()` 函式內部,初始化陣列。

  • 步驟 6 − 現在,呼叫 `productMax()` 函式並將陣列傳遞給它。

  • 步驟 7 − 接下來,使用 `fmt.Println()` 函式列印結果的最大乘積值。

示例

以下是使用迭代法的雙指標法在Go語言程式中查詢陣列中兩個數字的最大乘積的示例。

package main

import (
   "fmt"
   "sort"
)

func productMax(nums []int) int {
   n := len(nums)
   sort.Ints(nums)
   i, j := 0, n-1
   prodMax := nums[i] * nums[j]
   for i < j {
      prod := nums[i] * nums[j]
      if prod > prodMax {
         prodMax = prod
      }
      if nums[i] < 0 {
         i++
      } else {
         j--
      }
   }
   return prodMax
}

func main() {
   nums := []int{20, 10, 30, 60, 10}
   fmt.Println("Array:", nums)
   fmt.Println("Maximum product:", productMax(nums))
}

輸出

Array: [20 10 30 60 10]
Maximum product: 600

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

在這個方法中,我們將定義一個 `findMaxProduct()` 函式,以最佳化的迭代方式透過雙指標法在陣列中找到兩個數字的最大乘積。

演算法

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

  • 步驟 2 − 開始 `main()` 函式。在 `main()` 函式內部,初始化陣列。

  • 步驟 3 − 現在,呼叫 `findMaxProduct()` 函式並將陣列傳遞給它。

  • 步驟 4 − 接下來,使用 `fmt.Println()` 函式列印結果的最大乘積值。

  • 步驟 5 − 現在,建立一個 `findMaxProduct()` 函式,它接收一個整數陣列作為引數。此函式將返回一個整數,表示陣列中兩個數字的最大乘積。

  • 步驟 6 − 首先,它檢查陣列的長度是否小於 2。如果是,則返回 0,因為它無法在長度小於 2 的陣列中找到兩個數字的乘積。否則,對陣列進行排序。

  • 步驟 7 − 現在,初始化兩個指標 `left` 和 `right`。`left` 指標指向已排序陣列的第一個元素,而 `right` 指標指向已排序陣列的最後一個元素。

  • 步驟 8 − 在每次迭代中,`left` 和 `right` 指標指向的數字相乘,並將它們的乘積儲存在一個名為 `product` 的變數中。如果 `product` 的值大於 `maxProduct`,則更新 `maxProduct` 的值。

示例

以下是使用最佳化迭代法的雙指標法在Go語言程式中查詢陣列中兩個數字的最大乘積的Go語言程式。

package main

import (
   "fmt"
   "sort"
)

func main() {
   arr := []int{50, 20, 10, 40, 60}
   maxProduct := findMaxProduct(arr)
   fmt.Println("Maximum product of two numbers:", maxProduct)
}

func findMaxProduct(arr []int) int {
   n := len(arr)
   if n < 2 {
      return 0
   }
   sort.Ints(arr)
   left, right := 0, n-1
   maxProduct := 0
   for left < right {
      product := arr[left] * arr[right]
      if product > maxProduct {
         maxProduct = product
      }
		if arr[left] < arr[right] {
         left++
      } else {
         right--
      }
   }
   return maxProduct
}

輸出

Maximum product of two numbers: 3000

結論

我們已經成功地編譯並執行了一個 Go 語言程式,該程式使用雙指標法在陣列中找到兩個數字的最大乘積,並提供了兩個示例。在第一個示例中,我們使用了迭代法,在第二個示例中,我們使用了最佳化迭代法。

更新於:2023年4月3日

瀏覽量:387

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告