diff --git a/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/maximumsubarray/KadaneAlgorithm.java b/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/maximumsubarray/KadaneAlgorithm.java index 0aaa1b6c23..60171220cd 100644 --- a/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/maximumsubarray/KadaneAlgorithm.java +++ b/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/maximumsubarray/KadaneAlgorithm.java @@ -13,22 +13,22 @@ public class KadaneAlgorithm { int start = 0; int end = 0; - int maxSoFar = 0, maxEndingHere = 0; - + int maxSoFar = arr[0], maxEndingHere = arr[0]; for (int i = 0; i < size; i++) { if (arr[i] > maxEndingHere + arr[i]) { start = i; maxEndingHere = arr[i]; - } else + } else { maxEndingHere = maxEndingHere + arr[i]; + } if (maxSoFar < maxEndingHere) { maxSoFar = maxEndingHere; end = i; } } - logger.info("Found Maximum Subarray between {} and {}", start, end); + logger.info("Found Maximum Subarray between {} and {}", Math.min(start, end), end); return maxSoFar; } } diff --git a/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/maximumsubarray/KadaneAlgorithmUnitTest.java b/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/maximumsubarray/KadaneAlgorithmUnitTest.java index 9bece56f5b..71531dcf59 100644 --- a/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/maximumsubarray/KadaneAlgorithmUnitTest.java +++ b/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/maximumsubarray/KadaneAlgorithmUnitTest.java @@ -9,11 +9,22 @@ class KadaneAlgorithmUnitTest { @Test void givenArrayWithNegativeNumberWhenMaximumSubarrayThenReturns6() { //given - int[] arr = new int[]{-3, 1, -8, 4, -1, 2, 1, -5, 5}; + int[] arr = new int[] { -3, 1, -8, 4, -1, 2, 1, -5, 5 }; //when KadaneAlgorithm algorithm = new KadaneAlgorithm(); int maxSum = algorithm.maxSubArraySum(arr); //then assertEquals(6, maxSum); } + + @Test + void givenArrayWithAllNegativeNumbersWhenMaximumSubarrayThenReturnsExpectedResult() { + //given + int[] arr = new int[] { -8, -7, -5, -4, -3, -1, -2 }; + //when + KadaneAlgorithm algorithm = new KadaneAlgorithm(); + int maxSum = algorithm.maxSubArraySum(arr); + //then + assertEquals(-1, maxSum); + } } \ No newline at end of file