最大子序列和问题

问题声明:

给定整数A1,A2,...,AN(可能有负数),求Ai+...+Aj的最大值(1 <= i <= N, 1 <= j <= N, i <= j)(为方便起见,如果所有整数均为负数,则最大子序列和为0)。

有效算法:

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;
}

该算法的时间复杂度为O(N)。

posted @ 2014-02-26 17:55  ITtecman  阅读(326)  评论(0编辑  收藏  举报