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 largestsum = 6
.
The smart solution is to only record 1) the max sum of n-1 array 2) the max sum if the current number is included in the sum.
This is both a divide and conquer and O(n) method because the problem is solved usring Array(n-1).
class Solution {
public int maxSubArray(int[] nums) {
int maxSoFar=nums[0], maxEndingHere=nums[0];
for (int i=1;i<nums.length;++i){
maxEndingHere= Math.max(maxEndingHere+nums[i],nums[i]);
maxSoFar=Math.max(maxSoFar, maxEndingHere);
}
return maxSoFar;
}
}