问题声明:
给定整数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)。