一听这题的名字,就有一股浓浓的校招味。
没错,又是动态规划了。
思路:
1.动态规划嘛,先弄个数组dp[i] : 以i结尾的最大连续序列和。
看到加粗的字体,显然我们要考虑nums[i]是加到之前的序列,还是单独成为一个序列的开头。
2.状态转移方程:dp[i] = Max( dp[i-1]+nums[i] , nums[i] )
代码:
class Solution {
public int maxSubArray(int[] nums) {
if( nums == null )return 0;
int[] dp = new int[nums.length];
dp[0] = nums[0];
int max = nums[0];
for(int i=1;i<nums.length;i++) {
dp[i] = Math.max(dp[i-1] + nums[i],nums[i]);
max = Math.max(dp[i],max);
}
return max;
}
}