forked from thuva4/Algorithms
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathKadane.java
More file actions
62 lines (55 loc) · 1.61 KB
/
Copy pathKadane.java
File metadata and controls
62 lines (55 loc) · 1.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import java.util.Arrays;
public class Kadane {
public static int maxSum(int[] arr) {
int maxEndingHere = arr[0];
int maxSoFar = arr[0];
for (int i = 1; i < arr.length; i++) {
int x = arr[i];
maxEndingHere = Math.max(x, maxEndingHere + x);
maxSoFar = Math.max(maxSoFar, maxEndingHere);
}
return maxSoFar;
}
public static int[] maxSumSubarray(int[] arr) {
int maxSum = 0;
int maxStart = 0;
int maxEnd = 0;
int sum = 0;
int start = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
if (sum <= 0 && arr[i] < 0) {
sum = 0;
start = i + 1;
} else if (sum > maxSum) {
maxSum = sum;
maxStart = start;
maxEnd = i + 1;
}
}
return Arrays.copyOfRange(arr, maxStart, maxEnd);
}
public static int maxSubArraySum(int a[])
{
int size = a.length;
int max_so_far = Integer.MIN_VALUE, max_ending_here = 0;
for (int i = 0; i < size; i++)
{
max_ending_here = max_ending_here + a[i];
if (max_so_far < max_ending_here)
max_so_far = max_ending_here;
if (max_ending_here < 0)
max_ending_here = 0;
}
return max_so_far;
}
public static void main(String[] args) {
int[] a = { -2, 1, -3, 4, -1, 2, 1, -5, 4 }; // [4, −1, 2, 1] = 6
System.out.println("MaxSumSubarray = " + Arrays.toString(maxSumSubarray(a)));
System.out.println("MaxSum = " + maxSum(a));
System.out.println("MaxSumSubarray = " + maxSubArraySum(a));
int[] b = {-2, 1, 2, 4, -7, 2, 2, 4, -7, -1, 2, 3}; // [2, 2, 4] = 8, [1, 2, 4, -7, 2, 2, 4] = 8
System.out.println("MaxSumSubarray = " + Arrays.toString(maxSumSubarray(b)));
System.out.println("MaxSum = " + maxSum(b));
}
}