Skip to content

Commit a9e7324

Browse files
Merge pull request #575 from balasbk/master
max subarray sum
2 parents 369f102 + 0b77483 commit a9e7324

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

C++/max subarray sum.cpp

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
// A Divide and Conquer based program for maximum subarray sum problem
2+
#include <bits/stdc++.h>
3+
4+
5+
// A utility funtion to find maximum of two integers
6+
int max(int a, int b) { return (a > b)? a : b; }
7+
8+
// A utility funtion to find maximum of three integers
9+
int max(int a, int b, int c) { return max(max(a, b), c); }
10+
11+
// Find the maximum possible sum in arr[] auch that arr[m] is part of it
12+
int maxCrossingSum(int arr[], int l, int m, int h)
13+
{
14+
// Include elements on left of mid.
15+
int sum = 0;
16+
int left_sum = INT_MIN;
17+
for (int i = m; i >= l; i--)
18+
{
19+
sum = sum + arr[i];
20+
if (sum > left_sum)
21+
left_sum = sum;
22+
}
23+
24+
// Include elements on right of mid
25+
sum = 0;
26+
int right_sum = INT_MIN;
27+
for (int i = m+1; i <= h; i++)
28+
{
29+
sum = sum + arr[i];
30+
if (sum > right_sum)
31+
right_sum = sum;
32+
}
33+
34+
// Return sum of elements on left and right of mid
35+
return left_sum + right_sum;
36+
}
37+
38+
// Returns sum of maxium sum subarray in aa[l..h]
39+
int maxSubArraySum(int arr[], int l, int h)
40+
{
41+
// Base Case: Only one element
42+
if (l == h)
43+
return arr[l];
44+
45+
// Find middle point
46+
int m = (l + h)/2;
47+
48+
/* Return maximum of following three possible cases
49+
a) Maximum subarray sum in left half
50+
b) Maximum subarray sum in right half
51+
c) Maximum subarray sum such that the subarray crosses the midpoint */
52+
return max(maxSubArraySum(arr, l, m),
53+
maxSubArraySum(arr, m+1, h),
54+
maxCrossingSum(arr, l, m, h));
55+
}
56+
57+
/*Driver program to test maxSubArraySum*/
58+
int main()
59+
{
60+
int arr[] = {2, 3, 4, 5, 7};
61+
int n = sizeof(arr)/sizeof(arr[0]);
62+
int max_sum = maxSubArraySum(arr, 0, n-1);
63+
printf("Maximum contiguous sum is %dn", max_sum);
64+
getchar();
65+
return 0;
66+
}

0 commit comments

Comments
 (0)