题目:
输入一个整形数组,数组里面有正数也有负数,数组中一个或者连续的多个整数组成一个子数组。求所有子数组的和的最大值,时间复杂度为O(n).
例如:输入的数组为{1,-2,3,10-4,7,2,-5},则和的最大子数组为{3,10,-4,7,2},因此输出为该子数组的和为18.
本题考查知识点:数组、动态规划
本题难度:初级

#include <stdlib.h>
#include <string.h>
#include "oj.h"
/*
功能:
输入:pIntArray:数组,nCout:数组长度
输出:
返回:返回最大值
*/
int GetSubArraySum(int* pIntArray, int nCount)
{
/*在这里实现功能*/
bool g_InvalidInput = false;//用全局变量标记是否为无效输入
if((pIntArray == NULL)||(nCount <= 0))
{
g_InvalidInput = true;
return 0;
}
g_InvalidInput = false;
int nCurSum = 0;
int nGreatestSum = 0x80000000;//初始值设置为很小的负数
for(int i=0;i<nCount;i++)
{
if(nCurSum<=0)//如果子数组的和为负数,下一个数n加上这个和后,会比n本身小,因此摒弃掉之前累加的子数组和
{
nCurSum = pIntArray[i];
}
else
{
nCurSum += pIntArray[i];
}
if(nCurSum > nGreatestSum)
{
nGreatestSum = nCurSum;
}
}
return nGreatestSum;
}
博客探讨了如何解决求解整型数组中最大子数组和的问题,使用动态规划方法,要求时间复杂度为O(n)。以数组{1, -2, 3, 10, -4, 7, 2, -5}为例,最大子数组{3, 10, -4, 7, 2}的和为18。"
103831243,8612698,C++实现合并两个链表,"['C++编程', '数据结构', '链表操作']
687

被折叠的 条评论
为什么被折叠?



