22 lines
406 B
Go
22 lines
406 B
Go
package q918
|
|
|
|
func maxSubarraySumCircular(nums []int) int {
|
|
maxSum, minSum, maxPfx, minPfx := nums[0], nums[0], 0, 0
|
|
|
|
sum := 0
|
|
for _, num := range nums {
|
|
sum += num
|
|
maxSum = max(maxSum, sum-minPfx)
|
|
minSum = min(minSum, sum-maxPfx)
|
|
|
|
maxPfx = max(maxPfx, sum)
|
|
minPfx = min(minPfx, sum)
|
|
}
|
|
|
|
if sum == minSum {
|
|
return maxSum
|
|
}
|
|
return max(maxSum, sum-minSum)
|
|
}
|
|
|
|
var _ = maxSubarraySumCircular
|