【算法Everyday】第二日 求子数组的最大和

题目

// 3.求子数组的最大和
// 题目:
// 输入一个整形数组,数组里有正数也有负数。
// 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
// 求所有子数组的和的最大值。要求时间复杂度为O(n)。
//
// 例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,
// 因此输出为该子数组的和18。

分析

还是递归的思路。

代码

int GetMaxSubSum(int* pArr, int length, int* pLowIndex, int* pHighIndex)
{
int low(0), high(0); int maxSum = pArr[0];
int sumToEnd = pArr[0]; int i(1);
while (i<length)
{
sumToEnd += pArr[i]; if (sumToEnd < 0)
{
low = high = ++i;
sumToEnd = 0;
continue;
}
else
{
high = i;
if (pArr[i] >= 0)
{
if (sumToEnd > maxSum)
{
*pHighIndex = high;
*pLowIndex = low;
maxSum = sumToEnd;
}
}
i++;
}
} return maxSum;
}
上一篇:JavaScript从入门到精通(附光盘1张):作者:明日科技出版社:清华大学出版社出版时间:2012年09月


下一篇:Python3学习之路~6.7 经典类和新式类的继承顺序