求出一个序列的最大子序和,顾名思义,就是一段最大的连续序列的和
本题主要四种解法,时间复杂度分别为o(n3),o(n2),o(nlogn),以及o(n)
下面主要介绍
在线处理法(最节省时间)
#include <iostream>
using namespace std;
int main()
{
double a[8];
for(int i=0;i<8;i++)
{
cin>>a[i];
}
double Thisadd;
double Maxadd;
Thisadd=Maxadd=0;
for(int i=0;i<8;i++)
{
Thisadd+=a[i];
if(Thisadd>Maxadd)
Maxadd=Thisadd;
else if(Thisadd<0)//如果thisadd<0其对最大子列就没有作用,也就是说再从下一个开始计算
Thisadd=0;
}
cout<<Maxadd<<endl;
}