思路:
(1) dp[i]:以第i項結束的最大和,答案是dp[i]中的最大值,所以要求兩次最值!!!
(2) dp[i] = max(dp[i-1] + nums[i], nums[i]);
dp[i-1] < 0時,dp[i] = nums[i];
dp[i-1] > 0時,dp[i] = dp[i-1] + nums[i];
所以如上
(3) dp[0] = nums[0];
代碼:
public int maxSubArray(int[] nums) {
int[] dp = new int[nums.length];
int i = 0, max = nums[0];
if(nums.length == 1)
return nums[0];
dp[0] = nums[0];
for(i=1; i<nums.length; i++){
dp[i] = Math.max(dp[i-1]+nums[i], nums[i]);
max = Math.max(dp[i], max);
}
return max;
}