题目描述:
输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为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为结尾的连续最大和就是自己。
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());
}
};