每日一题:求连续子数组的最大和

题目:

输入一个长度为n的整型数组array,数组中的一个或连续多个整数组成一个子数组,子数组最小长度为1。求所有子数组的和的最大值。

解析:

刚拿到这道题时,觉得这道题很简单,但提交了好几次都失败,脑子就有点乱。随后翻看题解发现这道题好ta **的nb,我是真的fw。

思路:

我们要求连续子数组的和,刚开始我想的是从前往后遍历,搞两个变量一个sum,一个cur,sum来记录最大子数组和,cur来记录目前走到的前缀和,遇到负数就清空cur,然后继续遍历。但问题就来了:遇到一个负数,但是如果负数后面有个更大的正数例如:(【1,-2, ,3,10,-4,7,2,-5】)这个数组当遇到-4,其实它后面加了更大的数所以和会更大。

所以得换个思路:我们依旧从前往后遍历,然后先判断上次加完的ret是否为负,若为负则跳过原来节点把ret设为当前节点的值(先不用管这次的为正还是负,判断留在下一次),如果为正,则继续把当前节点加入ret中,然后把ret与sum比较取最大值。进行下一次循环。

代码实现:

int FindGreatestSumOfSubArray(vector<int>& array) {
        // write code here
        if(array.size()==0)
            return 0;
        int sum=array[0],ret=array[0];
        for(int i=1;i<array.size();i++)
        {
            if(ret<0)
                ret=array[i];
            else
                ret+=array[i];
            sum=max(sum,ret);
        }
        return sum;
    }
};

相关推荐

  1. 每日连续

    2023-12-28 20:24:03       63 阅读
  2. 【LeetCode每日】53.

    2023-12-28 20:24:03       60 阅读
  3. 【C】每日 53

    2023-12-28 20:24:03       34 阅读
  4. LeetCode每日[C++]-1793.好分数

    2023-12-28 20:24:03       46 阅读
  5. 每日OJ_数组串dp①_力扣53.

    2023-12-28 20:24:03       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-28 20:24:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-28 20:24:03       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-28 20:24:03       82 阅读
  4. Python语言-面向对象

    2023-12-28 20:24:03       91 阅读

热门阅读

  1. Hotspot源码解析-第八章

    2023-12-28 20:24:03       56 阅读
  2. C++ string类详解 适合零基础小白

    2023-12-28 20:24:03       54 阅读
  3. 闰年显示#洛谷

    2023-12-28 20:24:03       51 阅读
  4. 过滤器的简单使用

    2023-12-28 20:24:03       66 阅读
  5. Redis单线程的正确理解(一)

    2023-12-28 20:24:03       62 阅读
  6. css吸顶(position: sticky;)

    2023-12-28 20:24:03       90 阅读
  7. 【排序算法】合并两个有序数组

    2023-12-28 20:24:03       58 阅读
  8. MongoDB

    MongoDB

    2023-12-28 20:24:03      56 阅读
  9. Tekton

    Tekton

    2023-12-28 20:24:03      51 阅读