Skip to content

Commit 162dfa4

Browse files
authored
Merge pull request #240 from mendoza/maximum-circular-subarray-sum
Maximum circular subarray sum
2 parents 2717c83 + a96e242 commit 162dfa4

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

Diff for: MaximumCircularSubarraySum.cpp

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#include <iostream>
2+
3+
/*
4+
Simple Kadane's algorithm to
5+
find maximum subarray sum
6+
*/
7+
8+
int kadane(int a[], int n) {
9+
int highest = 0, ending = 0;
10+
for (int i = 0; i < n; i++) {
11+
ending = ending + a[i];
12+
if (ending < 0) ending = 0;
13+
if (highest < ending) highest = ending;
14+
}
15+
return highest;
16+
}
17+
18+
/*
19+
Function returns maximum
20+
circular contiguous sum in a[]
21+
*/
22+
23+
int maxCircularSum(int a[], int n) {
24+
int max = kadane(a, n);
25+
int wrap = 0;
26+
for (int i = 0; i < n; i++) {
27+
wrap += a[i];
28+
a[i] = -a[i];
29+
}
30+
wrap = wrap + kadane(a, n);
31+
return (wrap > max) ? wrap : max;
32+
}
33+
34+
int main() {
35+
int a[] = {11, 10, -20, 5, -3, -5, 8, -13, 10};
36+
int n = sizeof(a) / sizeof(a[0]);
37+
std::cout << "Maximum circular subarray sum: " << maxCircularSum(a, n)
38+
<< std::endl;
39+
return 0;
40+
}

0 commit comments

Comments
 (0)