连续子数组的最大和

2018-12-17  本文已影响7人  ChancePro

题目

输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n)。
例如,输入的数组为{1, -2, 3, 10, -4, 7, 2, -5},和最大的子数组为{3, 10, -4, 7, 2},因此输出该子数组的和 18。

解法

bool g_InvalidInput = false;

int FindGreatestSumOfSubArray(int *pData, int nLength)
{
    if(pData == nullptr) || (nLength <= 0)
    {
        g_InvalidInput = true;
        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;
}
上一篇 下一篇

猜你喜欢

热点阅读