子数组的最大累加和问题(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用两个栈实现队列(