一.题目描述
给定一个数组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 春招闯关活动」, 点击查看 活动详情