53. Maximum Subarray
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
.
class Solution {
public:
int maxSubArray(vector<int>& nums) {
return maxSubArrayHelp(nums,0,nums.size()-1);
}
int maxSubArrayHelp(vector<int>& nums,int begin, int end){
if(begin>end){
return INT_MIN;
}
if(begin==end){
return nums[begin];
}
int mid = (begin+end)/2;
int leftMax = maxSubArrayHelp(nums,begin,mid-1);
int rightMax = maxSubArrayHelp(nums,mid+1,end);
int lMax=0;
int left = 0;
for(int i=mid-1;i>=begin;i--){
left = left+nums[i];
lMax = max(left,lMax);
}
int rMax = 0;
int right =0;
for(int i=mid+1;i<=end;i++){
right = right+nums[i];
rMax = max(right,rMax);
}
return max(lMax+rMax+nums[mid],max(leftMax,rightMax));
}
};