子数组的最大累加和问题 | 刷题打卡

158 阅读1分钟

一.题目描述

给定一个数组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

备注:

1≤N≤105
∣arri​∣≤100

二.解题思路:

动态规划问题

第i个子数组等于第i-1个子数组加上本身,如果大于本身,说明当前为最大。

所以公式为

  • dp[i]=Math.max(dp[i-1]+arr[i],arr[i]);

    import java.util.*;

    public class Solution {

    public int maxsumofSubarray (int[] arr) {
         int len=arr.length;
        int[] dp=new int[len];
        dp[0]=arr[0];
        for(int i=1;i<len;i++){
            dp[i]=Math.max(dp[i-1]+arr[i],arr[i]);
        }
        return dp[len-1];
    }
    

    }

三.总结

这是我第二次做动态规划问题,虽然比较简单,但是能够看出来也是一种进步吧。嗖嗖

本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情