您的位置:首页 > 其它

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

2014-04-16 11:58 281 查看

题目

// 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: