确定状态
这道题难就在确定状态。因为根据给定的输入,我们可能在中间找到最大值,而不是在最后找到最大值。
但是我们可以用一个变量去保存全局的最大值
dp[i]表示从下标0至下标i最大的子序列和
状态转移方程
dp[i] = max(dp[i-1]+nums[i],nums[i])\
初始条件和边界条件
dp[0] = =nums[0]
计算的顺序
dp[0] ..... dp[n-1]
代码
class Solution {
public int maxSubArray(int[] nums) {
int n = nums.length;
int[] dp = new int[n];//dp[i] means the maximum subarray ending with A[i];
dp[0] = nums[0];
int max = dp[0];
for(int i = 1; i < n; i++){
dp[i] = nums[i] + (dp[i - 1] > 0 ? dp[i - 1] : 0);
max = Math.max(max, dp[i]);
}
return max;
}
}