问题描述:
输出一个数组里面连续子序列的最大和。要求时间复杂度O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。
解题思路:
动态规划的经典算法,思路比较简单。(定义一个临时变量b,遍历每一个元素,若当前b<0,则令b=a[i],否则b+=a[i])
Code:
/*全为负数,连续子序列最大和为0*/
int MaxSumOfSeq(vector<int> &num,int n)
{
int sum=0;
int b=0;
for(int i=0;i<n;i++)
{
if(b<0)
b=num[i];
else
b+=num[i];
if(sum<b)
sum=b;
}
return sum;
}