Question
Given n numbers (both +ve and -ve), arranged in a circle, fnd the maximum sum of consecutive number
Solution
First pass: find max subarray sum.
Second pass: find min subarray sum, and subtract it from total sum.
Suggested on G4G
Code
written by me
public int maxConsSum2(int[] arr) {
if (arr == null || arr.length == 0) {
return 0;
}
int soFar = 0;
int max = 0;
int totalSum = 0;
for (Integer i: arr) {
totalSum += i;
// totalSum is used in next step
soFar += i;
soFar = Math.max(soFar, 0);
max = Math.max(max, soFar);
}
int min = 0;
// calculate the min subarray
for (Integer i: arr) {
soFar += i;
soFar = Math.min(soFar, 0);
min = Math.min(min, soFar);
}
return Math.max(max, totalSum - min);
}