学习算法,看到一个有意思的题目,最大的子序列和问题:
给定整数A1,A2, …,An(可能有负数),求 的最大值(为方便起见,如果所有整数均为负数,则最大子序列和为0)。
有四种方法,运行时间分别是,
,O(NlogN),
,现在写出最好的算法。
只有1个for循环,运行时间为O(N)。
int MaxSubsequenceSum( const int A[ ], int N)
{
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;
}