From c862b5880a8a3715c396a0604c9ab0acbd309ec8 Mon Sep 17 00:00:00 2001 From: dupirefr Date: Sun, 27 Oct 2019 12:00:33 +0100 Subject: [PATCH 1/3] [BAEL-3348] Smallest missing positive integer in an array --- .../SmallestMissingPositiveInteger.java | 37 ++++++++ .../SmallestMissingPositiveIntegerTest.java | 88 +++++++++++++++++++ 2 files changed, 125 insertions(+) create mode 100644 algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveInteger.java create mode 100644 algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerTest.java diff --git a/algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveInteger.java b/algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveInteger.java new file mode 100644 index 0000000000..b08eea2a66 --- /dev/null +++ b/algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveInteger.java @@ -0,0 +1,37 @@ +package com.baeldung.algorithms.smallestinteger; + +import java.util.Arrays; + +public class SmallestMissingPositiveInteger { + public static int searchInSortedArray(int[] input) { + for (int i = 0; i < input.length; i++) { + if (i != input[i]) { + return i; + } + } + + return input.length; + } + + public static int searchInUnsortedArraySortingFirst(int[] input) { + Arrays.sort(input); + return searchInSortedArray(input); + } + + public static int searchInUnsortedArrayBooleanArray(int[] input) { + boolean[] flags = new boolean[input.length]; + for (int number : input) { + if (number < flags.length) { + flags[number] = true; + } + } + + for (int i = 0; i < flags.length; i++) { + if (!flags[i]) { + return i; + } + } + + return flags.length; + } +} diff --git a/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerTest.java b/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerTest.java new file mode 100644 index 0000000000..74195f13c8 --- /dev/null +++ b/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerTest.java @@ -0,0 +1,88 @@ +package com.baeldung.algorithms.smallestinteger; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class SmallestMissingPositiveIntegerTest { + @Test + void givenArrayWithThreeMissing_whenSearchInSortedArray_thenThree() { + int[] input = new int[] {0, 1, 2, 4, 5}; + + int result = SmallestMissingPositiveInteger.searchInSortedArray(input); + + assertThat(result).isEqualTo(3); + } + + @Test + void givenArrayWithOneAndThreeMissing_whenSearchInSortedArray_thenOne() { + int[] input = new int[] {0, 2, 4, 5}; + + int result = SmallestMissingPositiveInteger.searchInSortedArray(input); + + assertThat(result).isEqualTo(1); + } + + @Test + void givenArrayWithoutMissingInteger_whenSearchInSortedArray_thenArrayLength() { + int[] input = new int[] {0, 1, 2, 3, 4, 5}; + + int result = SmallestMissingPositiveInteger.searchInSortedArray(input); + + assertThat(result).isEqualTo(input.length); + } + + @Test + void givenArrayWithThreeMissing_whenSearchInUnsortedArraySortingFirst_thenThree() { + int[] input = new int[] {1, 4, 0, 5, 2}; + + int result = SmallestMissingPositiveInteger.searchInUnsortedArraySortingFirst(input); + + assertThat(result).isEqualTo(3); + } + + @Test + void givenArrayWithOneAndThreeMissing_whenSearchInUnsortedArraySortingFirst_thenOne() { + int[] input = new int[] {4, 2, 0, 5}; + + int result = SmallestMissingPositiveInteger.searchInUnsortedArraySortingFirst(input); + + assertThat(result).isEqualTo(1); + } + + @Test + void givenArrayWithoutMissingInteger_whenSearchInUnsortedArraySortingFirst_thenArrayLength() { + int[] input = new int[] {4, 5, 1, 3, 0, 2}; + + int result = SmallestMissingPositiveInteger.searchInUnsortedArraySortingFirst(input); + + assertThat(result).isEqualTo(input.length); + } + + @Test + void givenArrayWithThreeMissing_whenSearchInUnsortedArrayBooleanArray_thenThree() { + int[] input = new int[] {1, 4, 0, 5, 2}; + + int result = SmallestMissingPositiveInteger.searchInUnsortedArrayBooleanArray(input); + + assertThat(result).isEqualTo(3); + } + + @Test + void givenArrayWithOneAndThreeMissing_whenSearchInUnsortedArrayBooleanArray_thenOne() { + int[] input = new int[] {4, 2, 0, 5}; + + int result = SmallestMissingPositiveInteger.searchInUnsortedArrayBooleanArray(input); + + assertThat(result).isEqualTo(1); + } + + @Test + void givenArrayWithoutMissingInteger_whenSearchInUnsortedArrayBooleanArray_thenArrayLength() { + int[] input = new int[] {4, 5, 1, 3, 0, 2}; + + int result = SmallestMissingPositiveInteger.searchInUnsortedArrayBooleanArray(input); + + assertThat(result).isEqualTo(input.length); + } +} \ No newline at end of file From b0ecd1a0ae310c0f68ba791fb3d9abbe5ffc73e0 Mon Sep 17 00:00:00 2001 From: dupirefr Date: Sun, 27 Oct 2019 12:05:32 +0100 Subject: [PATCH 2/3] [BAEL-3348] Fixed unit test name --- ...gerTest.java => SmallestMissingPositiveIntegerUnitTest.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/smallestinteger/{SmallestMissingPositiveIntegerTest.java => SmallestMissingPositiveIntegerUnitTest.java} (98%) diff --git a/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerTest.java b/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerUnitTest.java similarity index 98% rename from algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerTest.java rename to algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerUnitTest.java index 74195f13c8..8bb7151b41 100644 --- a/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerTest.java +++ b/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerUnitTest.java @@ -4,7 +4,7 @@ import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; -class SmallestMissingPositiveIntegerTest { +class SmallestMissingPositiveIntegerUnitTest { @Test void givenArrayWithThreeMissing_whenSearchInSortedArray_thenThree() { int[] input = new int[] {0, 1, 2, 4, 5}; From 874e64761a6658493f8576692c5a4667ac591f7e Mon Sep 17 00:00:00 2001 From: dupirefr Date: Fri, 1 Nov 2019 00:35:30 +0100 Subject: [PATCH 3/3] [BAEL-3348] Moved code to algorithm-4 --- .../smallestinteger/SmallestMissingPositiveInteger.java | 0 .../smallestinteger/SmallestMissingPositiveIntegerUnitTest.java | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename {algorithms-miscellaneous-3 => algorithms-miscellaneous-4}/src/main/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveInteger.java (100%) rename {algorithms-miscellaneous-3 => algorithms-miscellaneous-4}/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerUnitTest.java (100%) diff --git a/algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveInteger.java b/algorithms-miscellaneous-4/src/main/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveInteger.java similarity index 100% rename from algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveInteger.java rename to algorithms-miscellaneous-4/src/main/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveInteger.java diff --git a/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerUnitTest.java b/algorithms-miscellaneous-4/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerUnitTest.java similarity index 100% rename from algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerUnitTest.java rename to algorithms-miscellaneous-4/src/test/java/com/baeldung/algorithms/smallestinteger/SmallestMissingPositiveIntegerUnitTest.java