剑指offer:连续子数组的最大和

来源:互联网 发布:mac desktop 编辑:程序博客网 时间:2024/06/06 14:26

原地址:http://www.nowcoder.com/questionTerminal/459bd355da1549fa8a49e350bf3df484


思路:分为两种情况,最大和非负和负。若当前最大和为负,那么令sum直接等于下一个值。


思路依次读入输入数组,进行累加,动态维护和的最大值。
设置两个变量,一个表示当前累加和currentSum,另一个表示子数组和的最大值greatestSum。由于currentSum为负数时继续累加的话,和只会变小,因此其为负数时,直接将下一个待读入的正整数进行替换。每次读入一个数后,将累加和跟greatestSum比较,来更新所求子数组和的最大值。
classSolution {
public:
    boolbInvalid = false;
    intFindGreatestSumOfSubArray(vector<int> array)
    {
        if(array.empty())
        {
            bInvalid = true;
            return0;
        }
         
        intcurrentSum = 0; // 当前和
        intgreatestSum = 0x80000000; // 和的最大值,初始值取32位int的最小值
         
        for(inti=0;i<array.size();++i)
        {
            if(currentSum < 0)
            {
                currentSum = array[i];
            }
            else
            {
                currentSum += array[i];
            }
             
            if(currentSum > greatestSum)
            {
                greatestSum = currentSum; // 更新和的最大值
            }
        }
         
        returngreatestSum;
    }
};

0 0