题目
示例
思路
代码
int maxSubarraySumCircular(int* nums, int numsSize){
int max_s = INT_MIN; // 最大子数组和,不能为空
int min_s = 0; // 最小子数组和,可以为空
int max_f = 0, min_f = 0, sum = 0;
for (int x = 0; x < numsSize; ++x) {
// 以 nums[i-1] 结尾的子数组选或不选(取 max)+ x = 以 x 结尾的最大子数组和
max_f = fmax(max_f, 0) + nums[x];
max_s = fmax(max_s, max_f);
// 以 nums[i-1] 结尾的子数组选或不选(取 min)+ x = 以 x 结尾的最小子数组和
min_f = fmin(min_f, 0) + nums[x];
min_s = fmin(min_s, min_f);
sum += nums[x];
}
return sum == min_s ? max_s : fmax(max_s, sum - min_s);
}
作者:小迅
链接:https://leetcode.cn/problems/maximum-sum-circular-subarray/solutions/2351536/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-jipy/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。