Skip to content

Commit 308b399

Browse files
committed
Add maximum subarray solution
1 parent 1104b83 commit 308b399

1 file changed

Lines changed: 44 additions & 0 deletions

File tree

  • src/main/java/com/packt/datastructuresandalg/lesson4/activity/maxsubarray/solution
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.packt.datastructuresandalg.lesson4.activity.maxsubarray.solution;
2+
3+
public class MaximumSubarray {
4+
public int maxSubarrayCross(int[] a, int l, int m, int h) {
5+
int leftSum = Integer.MIN_VALUE;
6+
int sum = 0;
7+
for (int i = m; i >= l; i--) {
8+
sum += a[i];
9+
if (sum > leftSum)
10+
leftSum = sum;
11+
}
12+
int rightSum = Integer.MIN_VALUE;
13+
sum = 0;
14+
for (int i = m + 1; i <= h; i++) {
15+
sum += a[i];
16+
if (sum > rightSum)
17+
rightSum = sum;
18+
}
19+
return leftSum + rightSum;
20+
}
21+
22+
public int maxSubarrayAux(int[] a, int l, int h) {
23+
if (l == h)
24+
return a[l];
25+
else {
26+
int m = (l + h) / 2;
27+
int bl = maxSubarrayAux(a, l, m);
28+
int br = maxSubarrayAux(a, m + 1, h);
29+
int bc = maxSubarrayCross(a, l, m, h);
30+
int best = Math.max(Math.max(bl, br), bc);
31+
return best;
32+
}
33+
}
34+
35+
public int maxSubarray(int[] a) {
36+
return maxSubarrayAux(a, 0, a.length - 1);
37+
}
38+
39+
public static void main(String[] args) {
40+
int[] a = {13, -3, -25, 20, -3, -16, -23, 18, 20, -7, 12, -5, -22, 15, -4, 7};
41+
MaximumSubarray maxSubarray = new MaximumSubarray();
42+
System.out.println("Maximum subarray = " + maxSubarray.maxSubarray(a));
43+
}
44+
}

0 commit comments

Comments
 (0)