LeetCode·每日一题·918. 环形子数组的最大和·模拟

题目LeetCode·每日一题·918. 环形子数组的最大和·模拟_第1张图片

 

示例LeetCode·每日一题·918. 环形子数组的最大和·模拟_第2张图片

 

思路LeetCode·每日一题·918. 环形子数组的最大和·模拟_第3张图片

 

代码


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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(LeetCode刷题笔记,leetcode,算法,职场和发展)