听说来源于编程珠玑的题,在《数据结构与算法分析》(C语言描述,Mark Allen Weiss编写)的第一章里重新提到,书上给出了几个算法,下面贴出的是时间效率最优的算法:
#include<iostream>
using namespace std;
//前置条件:n>0为数组a的大小,也就是元素个数
//后置条件:返回最大子序列的和
int MaxSubequenceSum(int *a,int n);
int main()
{
int a[]={-2,11,-4,13,-5,-2};
cout<<MaxSubequenceSum(a,sizeof(a)/sizeof(a[0]))<<endl;
return 0;
}
int MaxSubequenceSum(int *a,int n)
{
asset(a!=NULL);//自己添加的,原书没有
int ThisSum,MaxSum,j;
ThisSum=MaxSum=0;
for(j=0;j<n;j++)
{
ThisSum+=a[j];
if(ThisSum>MaxSum)
{
MaxSum=ThisSum;
}
else if(ThisSum<0)
ThisSum=0;
}
return MaxSum;
}