题目描写叙述
输入一个数组,有正数也有负数,求连续子数组的最大和。
解题思路
典型动态规划
设f(i) 表示 以i位置结尾的子数组和,那么有:
递推式:f(i) = max{ f(i-1) + array[i], array[i] }
初值:f(0) = array[0]
实现代码
class Solution {
public:
int FindGreatestSumOfSubArray(vector<int> array) {
if(array.empty())
return 0;
int retMax=INT_MIN;
int len = array.size();
vector<int> ans(len,INT_MIN);
ans[0] = array[0];
retMax = ans[0];
for(int i=1; i<len; i++)
{
ans[i] = getMax( (ans[i-1] + array[i]), array[i]);
if(ans[i] > retMax)
retMax = ans[i];
}
return retMax;
}
int getMax(int a, int b)
{
return a>b?
a:b; } };