(nums []int)
| 5 | } |
| 6 | |
| 7 | func maxSubarraySumCircular(nums []int) int { |
| 8 | globalMax, globalMin := nums[0], nums[0] |
| 9 | currentMax, currentMin := 0, 0 |
| 10 | total := 0 |
| 11 | |
| 12 | for _, num := range nums { |
| 13 | currentMax = max(num, currentMax+num) |
| 14 | currentMin = min(num, currentMin+num) |
| 15 | total += num |
| 16 | globalMax = max(globalMax, currentMax) |
| 17 | globalMin = min(globalMin, currentMin) |
| 18 | } |
| 19 | |
| 20 | if globalMax > 0 { |
| 21 | return max(globalMax, total-globalMin) |
| 22 | } else { |
| 23 | return globalMax |
| 24 | } |
| 25 | |
| 26 | } |
| 27 | |
| 28 | func max(a, b int) int { |
| 29 | if a > b { |