给定整数A1,A2......An(可能有负数),求其最大子序列和(如果所有整数均为负数,则最大子序列和为0)(问题与算法来自数据结构与算法分析)
一般算法如下,算法运行时间(o(N²))
int Max_Subsequence_Sum(const int A[],int N)
{
int i,j,sum=0,Max_Sum=0;
for(i=0;i<=N;i++)
for(j=i;j<=N;j++)
{
sum+=A[j];
if(sum>Max_Sum)
Max_Sum=sum;
}
return Max_Sum;
}
比较好的算法如下,算法运行时间为(o(N))
int Max_Subsequence_Sum(const int A[],int N)
{
int sum,Maxsum,j;
sum=Maxsum=0;
for(j=0;j<=N;j++)
{
sum+=A[j];
if(sum>Maxsum)
Maxsum=sum;
else if(sum<0)
sum=0;
}
return Maxsum;
}