问题描述
给定一个数组arr,返回子数组的最大累加和(题目保证没有全为负数的数据)
例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子数组中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12。
示例
示例1
输入
[1, -2, 3, 5, -2, 6, -1]
输出
12
解决思路
思路
- 暴力求解:嵌套遍历
- 动态规划:遍历数组累加求和,当发现和小于0,说明从此为止向前的元素已经有最大元素,我们需要重新从0开始求和,重复上述过程。
代码实现
// 思路1
public class Solution {
public int maxsumofSubarray(int[] arr) {
int max = Integer.MIN_VALUE;
int res = 0;
for (int i = 0; i < arr.length; i++) {
res = Math.max(res + arr[i], 0);
max = Math.max(max, res);
}
return max;
}
}
时间复杂度分析:
O(N):遍历数组
空间复杂度分析:
O(1):没有使用额外的空间
小伙伴如果想测试的话,可以直接到牛客网这个链接做测试