divide and conquer approach
int maxSubArray(int A[], int n) {
return maxSub(A,0,n-1);
}
int maxSub(int A[], int left, int right){
if(left>right)return INT_MIN;
if(left==right)return A[left];
int mid=left+((right-left)>>1);
int leftMax=INT_MIN, rightMax=INT_MIN;
for(int i=mid-1, currSum=0; i>=left; --i)
currSum+=A[i], leftMax=max(leftMax, currSum);
for(int i=mid+1, currSum=0; i<=right; ++i)
currSum+=A[i], rightMax=max(rightMax, currSum);
int midMax=A[mid]+max(leftMax,0)+max(rightMax,0);
return max(max(maxSub(A,left,mid-1),maxSub(A,mid+1,right)),midMax);
}
answered
19 Sep, 18:35
c0mm3t
41●4
accept rate:
0%
What do you mean by "using the divide and conquer approach"? Split the array into two and find the largest sum in subarrays?