给定K个整数的序列{N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ...,
Nj},其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个,
例如给定序列{-2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和
为20。
/*
* 动态规划实现,算法复杂度O(n)
*/
intmaxSubSequenceSum3(int a[], int len)
{
int i;
int curSum; /* 当前序列和 */
int maxSum; /* 最大序列和 */
/* 初始化当前序列和为0 */
curSum = 0;
/* 初始化最大子序列和为序列第一个元素 */
maxSum = a[0];
/* 开始循环求子序列和 */
for (i = 0; i < len;i++)
{
curSum = curSum + a[i];
/* 与最大子序列和比较,更新最大子序列和 */
if (curSum > maxSum)
{
maxSum = curSum;
}
/* 动态规划部分,舍弃当前和为负的子序列 */
if (curSum < 0)
{
curSum = 0;
}
}
return maxSum;
}