// Package q918 implements a solution for https://leetcode.com/problems/maximum-sum-circular-subarray/ 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