- base case:思考问题规模最小时,是什么情况(临界值)。
- update function:自下而上思考这个问题,得到公式。
- gola:强调输出的是什么,很多时候并不是输出最后一个结果值。
上面的关键字是连续,即无论什么情况之前结果与nums[i]相加。我们新建一个动态规划数组(dp)来保存之前结果。
- dp[i-1]>0情况下,dp[i]=dp[i-1]+nums[i];
- dp[i-1]<0情况下,dp[i]=0+nums[i];
dp的初始长度为nums.length(),dp[0]=nums[0];使用一个临时的整型来保存最大的子序和。
public static int maxSubArray(int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
}
//dp数组
int[] dp = new int[nums.length];
dp[0] = nums[0];
int max = nums[0];
for (int i = 1; i < dp.length; i++) {
dp[i] = Math.max(dp[i - 1] + nums[i], nums[i]);
max = Math.max(max, dp[i]);
}
return max;
}