diff --git a/src/main/java/interview/MaximumSequenceWithOneZero.java b/src/main/java/interview/MaximumSequenceWithOneZero.java index 55a3596..17decf2 100644 --- a/src/main/java/interview/MaximumSequenceWithOneZero.java +++ b/src/main/java/interview/MaximumSequenceWithOneZero.java @@ -1,7 +1,6 @@ package interview; -import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -16,24 +15,20 @@ public static int maximumSequenceWithOneZero(List b) { if (b.size() == 1 && b.get(0) == 1) return 1; if (b.size() == 1 && b.get(0) == 0) return 0; - List bytes = new ArrayList<>(b); int maxCount = 0; - int count = 0; - if (bytes.get(0) == 1) count++; - - for (int i = 1; i < bytes.size(); i++) { - if (bytes.get(i) == 1 && bytes.get(i - 1) == 1) { - count++; - } - if (bytes.get(i) == 1 && bytes.get(i - 1) == 0) { - count++; - } - if (bytes.get(i) == 0 && bytes.get(i - 1) == 0) { - maxCount = Math.max(count, maxCount); - count = 0; + int previousCount = 0; + int currentCount = 0; + + for (Integer value : b) { + if (value == 1) { + currentCount++; + maxCount = Math.max(maxCount, previousCount + currentCount); + } else { + previousCount = currentCount; + currentCount = 0; } } - return Math.max(count, maxCount); + return maxCount; } diff --git a/src/test/java/interview/MaximumSequenceWithOneZeroTest.java b/src/test/java/interview/MaximumSequenceWithOneZeroTest.java index c30b939..1ce4edb 100644 --- a/src/test/java/interview/MaximumSequenceWithOneZeroTest.java +++ b/src/test/java/interview/MaximumSequenceWithOneZeroTest.java @@ -28,6 +28,11 @@ void shouldSplitSequenceOnTwoConsecutiveZeros() { assertEquals(3, maximumSequenceWithOneZero(List.of(1, 1, 0, 0, 1, 1, 1))); } + @Test + void shouldNotCountAcrossMultipleSeparatedZeros() { + assertEquals(2, maximumSequenceWithOneZero(List.of(1, 0, 1, 0, 1))); + } + @Test void shouldCountAllOnesWhenThereIsNoZeroSeparator() { assertEquals(5, maximumSequenceWithOneZero(List.of(1, 1, 1, 1, 1)));