连续子数组的最大和

输入一个整形数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为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则表示改输入非法。

posted @ 2013-03-07 20:31  没离开过  阅读(100)  评论(0编辑  收藏  举报