以下是使用golang实现该算法的示例代码:
package main
import (
"fmt"
)
func maxSubArray(nums []int, sum int) int {
maxSum := nums[0]
currSum := 0
left := 0
right := -1
for i := 0; i < len(nums); i++ {
currSum += nums[i]
if currSum == sum {
left = 0
right = i
maxSum = currSum
continue
}
if currSum-sum > maxSum {
left = right + 1
right = i
maxSum = currSum - sum
}
if currSum < 0 {
currSum = 0
}
}
return sum + maxSum, left+1, right+1 // 返回最大和、子数组起始下标和结束下标(加1是为了符合题目要求)
}
func main() {
var n, sum int
fmt.Scan(&n)
fmt.Scan(&sum)
nums := make([]int, n)
for i := range nums {
fmt.Scan(&nums[i])
}
maxSubArrMaxSum, subArrStartIdx, subArrEndIdx := maxSubArray(nums, sum)
fmt.Printf("连续最大子数组最大和: %d\n", maxSubArrMaxSum)
fmt.Printf("起始下标: %d\n", subArrStartIdx)
fmt.Printf("结束下标: %d\n", subArrEndIdx)
}
注意:上述代码假设输入的整数都不超过math.MaxInt32,如果需要处理更大的数字,应该使用更适合的数据类型。
内容由零声教学AI助手提供,问题来源于学员提问




