解题思路:dp[i] : 当前位置前的最大子序和
状态转移: dp[i] = Math.max(dp[i-1] + nums[i],nums[i]);
加上之前的数比自己大,就取这个数。不然,还不如不加,从自己开始。
代码:1
2
3
4
5
6
7
8
9
10
11public int maxSubArray(int[] nums) {
if(nums == null || nums.length == 0) return 0;
int[] dp = new int[nums.length];
dp[0] = nums[0];
int res = nums[0];
for(int i = 1;i<nums.length;i++){
dp[i] = Math.max(dp[i-1] + nums[i],nums[i]);
res = Math.max(res,dp[i]);
}
return res;
}