写动态规划题最重要的就是找到原本数组与需求的数组的关系
从这道题来看,求子数组的最大和,那么数组内只要某个正数之前的数组和为负,那么这个之前的数组和对最大和的贡献就为负,我们就可以将子数组的和的起点,移动到这个正数的位置上
写出动态规划转移矩阵:
dp[i] = dp[i-1]+num[i] (dp[i-1]>0)
dp[i] = num[i] (dp[i-1]<=0)
所以结果应该是:
class Solution {
public int maxSubArray(int[] nums) {
int sum = nums[0];
for(int i = 1 ; i < nums.length ; i++){
nums[i] += Math.max(nums[i-1], 0);
sum = Math.max(nums[i],sum);
}
return sum;
}
}