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
.
public class Solution {
public int maxSubArray(int[] nums) {
//soFar 存储到位置i时的最大值
//endHere存储包含位置i的最大值
int soFar = nums[0],endHere = nums[0];
for(int i = 1; i < nums.length; i++){
//关键点
//如果endHere + nums[i] < nums[i],为什么要包含前面的?所以直接从nums[i]开始
//动态规划,保证包含到nums[i]时,和最大,如果包,肯定包含i-1位
endHere = Math.max(endHere + nums[i],nums[i]);
//如果包含位置i时的最大值比之前的大,那么就替换原来的最大值
//比方e.g中i = 4 时,endHere = 3, soFar = 4
// i = 5 时,endHere = 5, soFar = 5
if(endHere> soFar){
soFar = endHere;
}
}
return soFar;
}
}