您的位置:首页 > 编程语言

随手小代码——最大子数组 联机算法

2015-08-09 14:28 337 查看
=================================版权声明=================================

[b]版权声明:本文为博主原创文章 未经许可不得转载
[/b]

请通过右侧公告中的“联系邮箱(wlsandwho@foxmail.com)”联系我

未经作者授权勿用于学术性引用。

未经作者授权勿用于商业出版、商业印刷、商业引用以及其他商业用途。                

本文不定期修正完善,为保证内容正确,建议移步原文处阅读。 <--------总有一天我要自己做一个模板干掉这只土豆

本文链接:/article/5266596.html

耻辱墙:/article/5266550.html

=======================================================================

改进了一下,记录最大子数组的下标。

不知道是不是能用。

=======================================================================

#include "stdafx.h"
#include <intsafe.h>
#include <iostream>

using namespace std;

int LinearFindMaxSubArray(int nArray[], int nLen, int& nMaxLeftIndex, int& nMaxRightIndex)
{
int nMaxSum = 0;
int nSum = 0;

for (int nIndex = 0;nIndex < nLen;nIndex++)
{
nSum += nArray[nIndex];

if (nSum > nMaxSum)
{
nMaxSum = nSum;

nMaxRightIndex = nIndex;
}
else
if (nSum < 0)
{
nSum = 0;

nMaxLeftIndex = nIndex + 1;
}
}

return nMaxSum;
}

int main()
{
int nArr[16] = { 13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15,-4,7 };

int nMaxLeftIndex = 0;
int nMaxRightIndex = 0;
int nMaxSum = LinearFindMaxSubArray(nArr,16, nMaxLeftIndex, nMaxRightIndex);

cout << "nArr[" << nMaxLeftIndex << "..." << nMaxRightIndex << "] = " << nMaxSum << endl;

//     int nArr[10] = { -2, 11, -4, 13, -5, 2, -5, -3, 12, -9 };
//
//     int nMaxLeftIndex = 0;
//     int nMaxRightIndex = 0;
//     int nMaxSum = LinearFindMaxSubArray(nArr, 9, nMaxLeftIndex, nMaxRightIndex);
//
//     cout << "nArr[" << nMaxLeftIndex << "..." << nMaxRightIndex << "] = " << nMaxSum << endl;

return 0;
}


=======================================================================
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: