简介
环形数组的最大子数组的和的最大值.
思路
分两种情况讨论, 一种是最大子数组就是普通值, 那么只要求出正常值就可以了.
另一种情况是除去全局最小的中间一段, 然后就是最大值.
code
class Solution {
public:
int maxSubarraySumCircular(vector<int>& n) {
if(n.size() == 1) return n[0];
int max_cur = n[0] ,
max_glo = n[0], min_cur = n[0], min_glo = n[0];
int sum = n[0];
for(int i=1; i<n.size(); i++) {
max_cur = max(n[i], max_cur + n[i]);
max_glo = max(max_glo, max_cur);
min_cur = min(n[i], n[i] + min_cur);
min_glo = min(min_glo, min_cur);
sum += n[i];
}
if(sum == min_glo){
return max_glo;
}
return max(max_glo, sum - min_glo);
}
};