Description

Submission
class Solution {
public:
int maxSubarraySumCircular(vector<int>& nums) {
int maxSum = nums[0], minSum = nums[0], total = 0, curMin = 0, curMax = 0;
for(int num : nums) {
curMax = max(curMax + num, num);
maxSum = max(curMax, maxSum);
curMin = min(curMin + num, num);
minSum = min(curMin, minSum);
total += num;
}
return maxSum > 0 ? max(maxSum, total - minSum) : maxSum;
}
};
