目录
- 一、题目描述
- 二、算法原理
- 三、代码实现
一、题目描述
二、算法原理
三、代码实现
class Solution {
public:
int maxSubarraySumCircular(vector<int>& nums)
{
int sum=0;
for(auto x:nums) sum+=x;
vector<int> f(nums.size());
vector<int> g(nums.size());
f[0]=nums[0];
g[0]=nums[0];
int ret1=f[0],ret2=g[0];
for(int i=1;i<nums.size();i++)
{
f[i]=max(f[i-1]+nums[i],nums[i]);
ret1=max(f[i],ret1);
g[i]=min(g[i-1]+nums[i],nums[i]);
ret2=min(g[i],ret2);
}
if(sum==ret2) return ret1;
return max(ret1,(sum-ret2));
}
};