本题是该题的变形:Leecode 53. 最大子数组和 经典dp
参考题解:Leecode 918. 环形子数组的最大和题解
class Solution {
public:
/*sum为数组的总和,maxsum为最大子数组和,minsum为最小子数组和
curmax为包含当前元素的最大子数组和,curmin为包含当前元素的最小子数组和*/
int maxSubarraySumCircular(vector<int>& nums) {
int sum=0,maxsum=nums[0],minsum=nums[0],curmax=0,curmin=0;
for(auto num : nums)
{
curmax=max(curmax+num,num);
maxsum=max(maxsum,curmax);
curmin=min(curmin+num,num);
minsum=min(minsum,curmin);
sum+=num;
}
return maxsum>0 ? max(maxsum,sum-minsum):maxsum;
}
};