class Solution {
public int maxSubArray(int[] nums) {
if (nums.length == 0) {
return 0;
}
// dp[i] 即以 nums[i] 为结尾的最大连续子数组和
int dp[] = new int[nums.length];
// base case 第一个元素前面没有子数组
dp[0] = nums[0];
for (int i = 1; i < nums.length; i++) {
// 状态转移 要么加上前面子数组构成新的数组,要么为自己本身
if (dp[i - 1] > 0) {
dp[i] = nums[i] + dp[i - 1];
} else {
dp[i] = nums[i];
}
}
int ans = Integer.MIN_VALUE;
for (int i = 0; i < nums.length; i++) {
ans = Math.max(ans, dp[i]);
}
return ans;
}
}