牛客网刷题-子数组的最大累加和问题

问题描述

给定一个数组arr,返回子数组的最大累加和(题目保证没有全为负数的数据)
例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子数组中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12。

示例

示例1

输入
[1, -2, 3, 5, -2, 6, -1]

输出
12

解决思路

思路

  1. 暴力求解:嵌套遍历
  2. 动态规划:遍历数组累加求和,当发现和小于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):没有使用额外的空间

小伙伴如果想测试的话,可以直接到牛客网这个链接做测试

子数组的最大累加和问题-牛客网

猜你喜欢

转载自blog.csdn.net/qq_35398517/article/details/114049097