53. 最大子数组和

记录当前最大值pre,总体最大值res,总体最大值总加的是当前最大值,故得到最大

我们用 f(i) 代表以第 i 个数结尾的「连续子数组的最大和」,

动态规划转移方程:

f(i)=max{f(i−1)+nums[i],nums[i]};

也就是看先前前缀和是否为正,正则有帮助,否则无帮助,通过pre维护前缀和

class Solution {public int maxSubArray(int[] nums) {int pre=0 , res=nums[0];for(int x : nums){pre=Math.max(x,pre+x);res=Math.max(pre,res);}return res;}
}

dp标准写法(增强for循环能指定遍历起始位置吗?) 

class Solution {public int maxSubArray(int[] nums) {int[] pre = new int[nums.length]; pre[0] = nums[0];int res=nums[0];for(int x=1; x<nums.length;x++){pre[x]=Math.max(nums[x],pre[x-1]+nums[x]);res=Math.max(pre[x],res);}return res;}
}