题目描述:

输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为{1,-2,3,10,-4,7,2,-5},和最大的子数组为{3,10,-4,7,2},因此输出为该子数组的和18。

解题思路:

用f[i]表示以i为结尾的连续最大和,如果以i-1为结尾的连续最大和(f[i-1])加上当前数(a[i])还没有当前数(a[i])大,那么以i为结尾的连续最大和就是自己。

29、连续子数组的最大和_整型

Demo:

class Solution {
public:
    int FindGreatestSumOfSubArray(vector<int> array) {
        // vec[i]表示以i结尾的最大和
        vector<int> vec;
        vec.push_back(array[0]);
        int sz = array.size();
        for (int i = 1; i < sz; ++i)
        {
            vec.push_back(max(vec[i-1] + array[i], array[i]));
        }
        return *max_element(vec.begin(), vec.end());
    }
};