int maxSubArraySum(int arr[], int l, int h) { if (l == h) return arr[l]; int m = (l + h)/2; return max(maxSubArraySum(arr, l, m), maxSubArraySum(arr, m+1, h), maxCrossingSum(arr, l, m, h)); }
int main() { int a[] = {-2,-3,4,-1,-2,1,5,-3}; int n = 8; printf("Max : %d\n",maxSubArraySum(a,n)); return 0; }
int main() { int a[] = {-2, -3, 4, -1, -2, 1, 5, -3}; int n = sizeof(a)/sizeof(a[0]); int max_sum = maxSubArraySum(a, n); printf("Maximum contiguous sum is %d\n", max_sum); return 0; }/*Now try below question
/* Driver program to test maxSubArraySum */ int main() { int a[] = {1,-1,1,1}; int n = sizeof(a)/sizeof(a[0]); int max_sum = maxSubArraySum(a, n); printf("Maximum contiguous sum is %d\n", max_sum); return 0; }
int main() { int arr[] = {2, 3, 4, 5, 7}; int n = sizeof(arr)/sizeof(arr[0]); int max_sum = maxSubArraySum(arr, 0, n-1); printf("Maximum contiguous sum is %d\n", max_sum); getchar(); return 0; }
int maxSubArraySum(int arr[], int low, int hi) { //Base case: only 1 element if (low == hi) return arr[low]; // Find mid point int mid = (low + hi ) >>1; // Return the max of the following three sums: // a) max subarray sum in the left half from mid // b) max subarray sum in the right half from mid // c) max subarray such that the subarray crosses midpoint return max(maxSubArraySum(arr, low, mid),\ maxSubArraySum(arr, mid+1, hi),\ maxCrossingSum(arr, low, mid, hi) ); }
/*Driver program to test maxSubArraySum*/ int main() { //int arr[] = {-2, -3, 4, -1}; int arr[] = {13, 14, -6, -2, -3, -1, -5, -6}; int n = sizeof(arr)/sizeof(arr[0]); int max_sum = maxSubArraySum(arr, 0, n-1); printf("Maximum contiguous sum is %d\n", max_sum); return 0; }
int main() { int dim; scanf("%d",&dim); int i ; int arr[dim]; for(i=0;i<dim;i++) scanf("%d",&arr[i]); int start = 0, end = 0; int size = sizeof(arr) / sizeof(arr[0]); printf(" The max sum is %d", maxSubArraySum(arr, size, &start, &end)); printf(" The begin and End are %d & %d", start, end); return 0; }
/* Driver program to test maxSubArraySum */ int main() { long long arr[100003]; long long b[100003]; long long int sum=0; long long t; scanf("%lld",&t); while(t--) { long long n; scanf("%lld",&n); for( long long i=0;i<n;i++) { scanf("%lld",&arr[i]); b[i]=-arr[i]; sum+=arr[i]; } long long max_sum = maxSubArraySum(b, n); if(max_sum<0) printf("%lld\n",(long long)(sum)); else printf("%lld\n",(long long)(sum+(2*max_sum))); } }