连续子数组的最大和
输入一个整形数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。
这题的思想是我们可以从第一个数开始往后加,每加一次前判断当前所有数的和是否为负数,如果是负数则舍弃前面所加,把值赋值为当前值,如果不是负数则直接加上当前值。
代码如下:
bool g_InvalidInput = false; int FindGreatestSumOfSubArray(int* pData, int length) { if( pData == NULL || length <=0 ) { g_InvalidInput =true; return 0; } g_InvalidInput = false; int CurSum = 0; int nGreatestSum = 0x80000000; for(int i = 0; i< length; ++i ) { if( CurSum <= 0 ) CurSum = pData[i]; else CurSum += pData[i]; if( CurSum > nGreatestSum) nGreatestSum = CurSum; } return nGreatestSum; }
全局变量
g_InvalidInput
用来表示输入是否有效。如果为TRUE则表示改输入非法。