33 lines
687 B
Go
33 lines
687 B
Go
package main
|
||
|
||
import (
|
||
"fmt"
|
||
"math"
|
||
)
|
||
|
||
// maxSubArray 給訂一組數字找到一組子陣列,這組子陣列的總和是最大的,最後 return 總和。
|
||
|
||
func maxSubArray(nums []int) int {
|
||
// 先定義目前最大的數字,最後就回傳這個數字
|
||
maxSum := math.MinInt
|
||
tmpSum := 0
|
||
|
||
for _, item := range nums {
|
||
tmpSum += item
|
||
// 更新 maxSum 為當前最大的子陣列和
|
||
maxSum = max(maxSum, tmpSum)
|
||
// 如果 tmpSum 小於 0,則重置為 0,從下一個元素重新開始累加
|
||
if tmpSum < 0 {
|
||
tmpSum = 0
|
||
}
|
||
}
|
||
|
||
return maxSum
|
||
}
|
||
|
||
func main() {
|
||
nums := []int{-2, 1, -3, 4, -1, 2, 1, -5, 4}
|
||
|
||
fmt.Println(maxSubArray(nums), maxSubArray(nums) == 6)
|
||
}
|