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) {
if(nums==null || nums.length == 0) return 0;
int [] res = new int[nums.length];
res[0] = nums[0];
int max = nums[0];
for(int i=1;i<nums.length;i++){
if(res[i-1]>0){
res[i] = res[i-1] + nums[i];
}else{
res[i] = nums[i];
}
max = Math.max(max, res[i]);
}
return max;
}
}
一开始写了一个O(n2)的解法,能猜到会超时,果然。点开提示说要用O(n)的解法,而且还有一个分治的解法。这个以后再补。动规应该是比较好想到的。如果前一个res[i-1] 位置的值小于0, 那么可以理解成对于最大和没有贡献,那么res[i] 就设置成 nums[i]就可以了。
另外打算把leetcode题解搬到gitbook里边去,希望不是立flag。(逃