Go語言程式:查詢長度為k的子陣列的最大和


本文將講解如何使用Go語言的暴力法、滑動視窗法和字首和法來查詢長度為k的子陣列的最大和。我們還將討論每種方法的演算法,並提供程式碼示例來演示它們的實現。

語法

func len(v Type) int

len() 函式用於獲取任何引數的長度。它接受一個引數作為我們希望查詢長度的資料型別變數,並返回一個整數型別的返回值,表示該變數的長度。

示例 1

第一個查詢長度為k的子陣列最大和的示例是暴力法。

package main

import (
   "fmt"
   "math"
)

func maxSumBruteForce(arr []int, k int) int {
   n := len(arr)
   maxSum := math.MinInt64

   for i := 0; i <= n-k; i++ {
      sum := 0

      for j := i; j < i+k; j++ {
         sum += arr[j]
      }

      if sum > maxSum {
         maxSum = sum
      }
   }
   return maxSum
}

func main() {
   x := []int{1, 2, 3, 4, 5}
   fmt.Println("The given array of integers is:", x)
   var num int = 5
   result := maxSumBruteForce(x, num)
   fmt.Println("The max sum is:", result)
}

輸出

The given array of integers is: [1 2 3 4 5]
The max sum is: 15

示例 2

在這個示例中,我們將編寫一個Go語言程式,使用字首和法查詢包含k個元素的子陣列的最大和。

package main

import (
   "fmt"
   "math"
)

func maxSumPrefixSum(arr []int, k int) int {
   n := len(arr)
   maxSum := math.MinInt64
   prefixSum := make([]int, n+1)

   for i := 1; i <= n; i++ {
      prefixSum[i] = prefixSum[i-1] + arr[i-1]
   }

   for i := k; i <= n; i++ {
      sum := prefixSum[i] - prefixSum[i-k]

      if sum > maxSum {
         maxSum = sum
      }
   }
   return maxSum
}

func main() {
   x := []int{1, 2, 3, 4, 5, 6}
   fmt.Println("The given array of integers is:", x)
   var num int = 6
   result := maxSumPrefixSum(x, num)
   fmt.Println("The max sum is:", result)
}

輸出

The given array of integers is: [1 2 3 4 5 6]
The max sum is: 21

結論

本文探討了三種不同的方法來查詢Go語言中給定長度k的子陣列的最大和。我們使用了兩種方法:暴力法和字首和法。暴力法的計算複雜度為O(nk),而字首和法的計算複雜度為O(n)。字首和法比暴力法更高效,因為它避免了不必要的計算。

更新於:2023年4月5日

433 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.