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)。字首和法比暴力法更高效,因為它避免了不必要的計算。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP