输入一个整型数组,数组里有正数也有负数。数组中的一个或多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。
思路:之前不知道在哪看过这题目,不过这题目是求股票买入卖出的解决方案,还有是股票那题是求该最大子数组在哪,有点不一样。再分析一下时间复杂度要求竟然为O(n),那么说明就只是一次遍历就完了。
bool g_InvalidInput=false;
int FindGreatestSumOfSubArray(int *pData,int nLength)
{
if((pData==nullptr)||(nLength<=0))
{
g_InvalidInput=false;
return 0;
}
g__InvalidInput=false;
int nCurSum=0;
int nGreatestSum=0x80000000;
for(int i=0;i<nLength;i++)
{
if(nCurSum<=0)
nCurSum=pData[i];
else
nCurSum+=pData[i];
if(nCurSum>nGreatestSum)
nGreatestSum=nCurSum;
}
return nGreatestSum;
}