Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array [-2,1,-3,4,-1,2,1,-5,4],
the contiguous subarray [4,-1,2,1] has the largest sum = 6.
首先,不难分析出目标子串的左右两边都一定是负数 且边界值为正数
也就是
. . . 负 正 . . . 正 负 . . .
不过这个分析也没什么用。。。
-2 4 3 5 -6 7 3 1 0 -3
dp[i]表示:包含第i 个元素 且以第i个元素为最后一个元素的子串 的最大长度
public int maxSubArray(int[] nums) {
int[] dp = new int[nums.length];
int max = Integer.MIN_VALUE;
if(nums.length == 0) return 0;
dp[0] = nums[0];
if(dp[0] > max) max = dp[0];
for(int i = 1;i < nums.length;i++){
dp[i] = nums[i];
if(dp[i-1] > 0) dp[i] += dp[i-1];
if(dp[i] > max) max = dp[i];
}
return max;
}