这个方法采自《计算机算法与分析》,虽然其计算时间为O(n),但是不能得到最大子段的头与尾。
算法基于推导出来的公式: b[j] = max{b[j-1]+a[j],a[j]}
#include <iostream>
using namespace std;
int MaxSum(int n,int a[]);
int main()
{
int a[7]= {0,-2,11,-4,13,-5,-2};
int result = MaxSum(6,a);
cout<<result<<endl;
return 0;
}
int MaxSum(int n,int a[])
{
int sum = 0;
int b = 0;
for(int i = 1; i <= n; i++)
{
if(b>0) b+=a[i];
else b = a[i];
if(b>sum) sum = b;
}
return sum;
}