public class Solution {
public int maxSubArray(int[] nums) {
// dp
int len = nums.length;
int[] dp = new int[len];
dp[0] = nums[0];
int max = nums[0];
for(int i=1;i<len;i++){
if(dp[i-1]<0){
dp[i] = nums[i];
}else{
dp[i] = dp[i-1] + nums[i];
}
if(max<dp[i]){
max = dp[i];
}
}
return max;
}
}
动态规划应该是最常用的算法设计方法,脑海中应时常有这样的模板在,一个程式在一步一步间变化的规律,将其拆分成几种简单地形式,比如这一题中,最长子串和问题,前n个子串,含第n个最大子串和 与 上一步的关系为:
Max(n) = Max(n-1)<0:0:Max(n-1) + nums[n], 遍历一遍n,更新max,既可以求得正确的解。