子数组的最大累加和问题(NC19/考察次数Top13/难度简单)

Posted 码农指南

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了子数组的最大累加和问题(NC19/考察次数Top13/难度简单)相关的知识,希望对你有一定的参考价值。

描述:
给定一个数组arr,返回子数组的最大累加和
例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子数组中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12.
题目保证没有全为负数的数据
[要求]
时间复杂度为O(n),空间复杂度为O(1)

示例1
输入:
[1, -2, 3, 5, -2, 6, -1]
返回值:
12
(题目来自牛客网)

用C++实现如下

class Solution {
public:
    /**
     * max sum of the subarray
     * @param arr int整型vector the array
     * @return int整型
     */
    int maxsumofSubarray(vector<int>& arr) {
        // write code here
        int len = arr.size();
        if(len == 0)
            return 0;
        vector<int> res(len);                       //定义一个vector存放每一位处的最大累加和
        res[0] = arr[0];
        int m = arr[0];                             //保存最大累加和
        for(int i = 1; i<len; i++)
        {
            //思路,将使用一个vector进行存值处理,判断此处数组值,加上前面的是不是累赘,当前结果取
            //大值,可理解为若加上前面是累赘,则不要前面的,直接从arr[i]开始,vector存放每位处的最大值
            res[i] = max(arr[i], res[i-1]+arr[i]);  
            m = max(m, res[i]);                     //将上面得到的arr[i]与m的老值进行对比,取大值
        }
        return m;
    }
};

纯手撕代码,如果觉得内容不错麻烦点个赞,后面陆续配上Top100算法题通俗易懂的讲解视频,可以花两个月时间完全掌握,进大厂不是梦,转行狗亲测!

以上是关于子数组的最大累加和问题(NC19/考察次数Top13/难度简单)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 1711. 大餐计数/NC59 矩阵的最小路径和/NC19 子数组的最大累加和问题/NC4 判断链表中是否有环/NC34 求路径/NC65大数斐波那契数列/NC76用两个栈实现队列(

反转链表(NC78/考察次数Top1/难度简单)

最长无重复子数组(NC41/考察次数Top14/难度中等)

最长递增子序列(NC91/考察次数Top32/难度中等)

最长公共子串(NC127/考察次数Top22/难度中等)

寻找峰值(NC107/考察次数Top70/难度入门)