最大子段和

2023-08-28   


题意:

找到一个具有最大和的连续子数组(子数组最少包含一个元素)。

分析:

状态表示: F[i]为以a[i]结尾的连续数组的最大和。
状态计算:

{F[i]=F[i1]+a[i]a[i]>0F[i]=a[i]otherwise \begin{cases} F[i]=F[i-1]+a[i] & a[i]>0\\ F[i]=a[i] & otherwise \end{cases}

代码:

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int ans = nums[0], res = 0;
        for (int i = 0; i < nums.size(); i ++) {
            if (res > 0) {
                res += nums[i];
            } else {
                res = nums[i];
            }
            if (res > ans)
                ans =  res;
        }
        return ans;
    }
};

Q.E.D.