class Solution {
public int maxSubArray(int[] nums) {
int[] dp=new int[nums.length];
int max=dp[0]=nums[0];
for (int i = 1; i < nums.length; i++) {
//前一个位置的前面所有元素的和加上现在位置的数就是当前位置的前面所有元素的和
//如果当前的和比前一个位置小,说明当前加的是一个负数,说明这一个区间是没有前途的,所有舍弃之前的所有和,以当前位置的值作为和,这样就相当于将区间左端移动到i位置了
dp[i]=Math.max(dp[i-1]+nums[i],nums[i]);
//max始终记录区间和的最大值
max=Math.max(max,dp[i]);
}
return max;
}
}
LeetCode 53. 最大子数组和--个人笔记--动态规划
最新推荐文章于 2024-08-12 15:45:48 发布