简介

环形数组的最大子数组的和的最大值.

思路

分两种情况讨论, 一种是最大子数组就是普通值, 那么只要求出正常值就可以了.
另一种情况是除去全局最小的中间一段, 然后就是最大值.

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);
    }
};
posted on 2021-08-25 16:55  HDU李少帅  阅读(46)  评论(0编辑  收藏  举报