Java 19717 Potential issue in "Maximum Subarray Problem in Java" article (#14541)
This commit is contained in:
parent
ed17162e4d
commit
63033cd8cf
|
@ -5,7 +5,7 @@ import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
public class KadaneAlgorithm {
|
public class KadaneAlgorithm {
|
||||||
|
|
||||||
private Logger logger = LoggerFactory.getLogger(BruteForceAlgorithm.class.getName());
|
private Logger logger = LoggerFactory.getLogger(KadaneAlgorithm.class.getName());
|
||||||
|
|
||||||
public int maxSubArraySum(int[] arr) {
|
public int maxSubArraySum(int[] arr) {
|
||||||
|
|
||||||
|
@ -14,15 +14,15 @@ public class KadaneAlgorithm {
|
||||||
int end = 0;
|
int end = 0;
|
||||||
|
|
||||||
int maxSoFar = arr[0], maxEndingHere = arr[0];
|
int maxSoFar = arr[0], maxEndingHere = arr[0];
|
||||||
|
|
||||||
for (int i = 1; i < size; i++) {
|
for (int i = 1; i < size; i++) {
|
||||||
|
maxEndingHere = maxEndingHere + arr[i];
|
||||||
if (arr[i] > maxEndingHere + arr[i]) {
|
if (arr[i] > maxEndingHere) {
|
||||||
start = i;
|
|
||||||
maxEndingHere = arr[i];
|
maxEndingHere = arr[i];
|
||||||
} else {
|
if (maxSoFar < maxEndingHere) {
|
||||||
maxEndingHere = maxEndingHere + arr[i];
|
start = i;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (maxSoFar < maxEndingHere) {
|
if (maxSoFar < maxEndingHere) {
|
||||||
maxSoFar = maxEndingHere;
|
maxSoFar = maxEndingHere;
|
||||||
end = i;
|
end = i;
|
||||||
|
|
|
@ -7,7 +7,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
class KadaneAlgorithmUnitTest {
|
class KadaneAlgorithmUnitTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void givenArrayWithNegativeNumberWhenMaximumSubarrayThenReturns6() {
|
void givenArrayWithNegativeNumberWhenMaximumSubarrayThenReturnsExpectedResult() {
|
||||||
//given
|
//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
|
//when
|
||||||
|
@ -27,7 +27,7 @@ class KadaneAlgorithmUnitTest {
|
||||||
//then
|
//then
|
||||||
assertEquals(-1, maxSum);
|
assertEquals(-1, maxSum);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void givenArrayWithAllPosiitveNumbersWhenMaximumSubarrayThenReturnsExpectedResult() {
|
void givenArrayWithAllPosiitveNumbersWhenMaximumSubarrayThenReturnsExpectedResult() {
|
||||||
//given
|
//given
|
||||||
|
@ -39,4 +39,15 @@ class KadaneAlgorithmUnitTest {
|
||||||
assertEquals(10, maxSum);
|
assertEquals(10, maxSum);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenArrayToTestStartIndexWhenMaximumSubarrayThenReturnsExpectedResult() {
|
||||||
|
//given
|
||||||
|
int[] arr = new int[] { 1, 2, -1, 3, -6, -2 };
|
||||||
|
//when
|
||||||
|
KadaneAlgorithm algorithm = new KadaneAlgorithm();
|
||||||
|
int maxSum = algorithm.maxSubArraySum(arr);
|
||||||
|
//then
|
||||||
|
assertEquals(5, maxSum);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue