From e62e1d88e6052863a01818ff95986834db4570f8 Mon Sep 17 00:00:00 2001 From: Imran Alam Date: Tue, 20 Feb 2024 15:35:40 +0530 Subject: [PATCH 01/11] Peak Elements --- .../peakelements/MultiplePeakFinder.java | 40 ++++++++++++++++++ .../peakelements/PeakElementFinder.java | 38 +++++++++++++++++ .../peakelements/SinglePeakFinder.java | 25 +++++++++++ .../MultiplePeakFinderUnitTest.java | 24 +++++++++++ .../PeakElementFinderUnitTest.java | 42 +++++++++++++++++++ .../SinglePeakFinderUnitTest.java | 13 ++++++ 6 files changed, 182 insertions(+) create mode 100644 core-java-modules/core-java-collections-array-list-2/src/main/java/com/baeldung/peakelements/MultiplePeakFinder.java create mode 100644 core-java-modules/core-java-collections-array-list-2/src/main/java/com/baeldung/peakelements/PeakElementFinder.java create mode 100644 core-java-modules/core-java-collections-array-list-2/src/main/java/com/baeldung/peakelements/SinglePeakFinder.java create mode 100644 core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/MultiplePeakFinderUnitTest.java create mode 100644 core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/PeakElementFinderUnitTest.java create mode 100644 core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/SinglePeakFinderUnitTest.java diff --git a/core-java-modules/core-java-collections-array-list-2/src/main/java/com/baeldung/peakelements/MultiplePeakFinder.java b/core-java-modules/core-java-collections-array-list-2/src/main/java/com/baeldung/peakelements/MultiplePeakFinder.java new file mode 100644 index 0000000000..29956ba027 --- /dev/null +++ b/core-java-modules/core-java-collections-array-list-2/src/main/java/com/baeldung/peakelements/MultiplePeakFinder.java @@ -0,0 +1,40 @@ +package com.baeldung.peakelements; + +import java.util.ArrayList; +import java.util.List; + +public class MultiplePeakFinder { + + public static List findPeaks(int[] arr) { + + List peaks = new ArrayList<>(); + + if (arr == null || arr.length == 0) { + return peaks; + } + findPeakElement(arr, 0, arr.length - 1, peaks); + return peaks; + } + + private static void findPeakElement(int[] arr, int low, int high, List peaks) { + + if (low > high) { + return; + } + + int mid = low + (high - low) / 2; + + if ((mid == 0 || arr[mid] >= arr[mid - 1]) && (mid == arr.length - 1 || arr[mid] >= arr[mid + 1])) { + peaks.add(arr[mid]); + } + + if (mid > 0) { + findPeakElement(arr, low, mid - 1, peaks); + } + + if (mid < arr.length - 1) { + findPeakElement(arr, mid + 1, high, peaks); + } + + } +} diff --git a/core-java-modules/core-java-collections-array-list-2/src/main/java/com/baeldung/peakelements/PeakElementFinder.java b/core-java-modules/core-java-collections-array-list-2/src/main/java/com/baeldung/peakelements/PeakElementFinder.java new file mode 100644 index 0000000000..963f505be5 --- /dev/null +++ b/core-java-modules/core-java-collections-array-list-2/src/main/java/com/baeldung/peakelements/PeakElementFinder.java @@ -0,0 +1,38 @@ +package com.baeldung.peakelements; + +import java.util.ArrayList; +import java.util.List; + +public class PeakElementFinder { + public List findPeakElement(int[] arr) { + int n = arr.length; + List peaks = new ArrayList<>(); + + if (n == 0) { + return peaks; + } + + for (int i = 0; i < n; i++) { + if (isPeak(arr, i, n)) { + peaks.add(i); + } + while (i < n - 1 && arr[i] == arr[i + 1]) { + i++; + } + } + + return peaks; + } + + private boolean isPeak(int[] arr, int index, int n) { + + if (index == 0) { + return n > 1 ? arr[index] >= arr[index + 1] : true; + } else if (index == n - 1) { + return arr[index] >= arr[index - 1]; + } + + return arr[index] >= arr[index - 1] && arr[index] >= arr[index + 1]; + } +} + diff --git a/core-java-modules/core-java-collections-array-list-2/src/main/java/com/baeldung/peakelements/SinglePeakFinder.java b/core-java-modules/core-java-collections-array-list-2/src/main/java/com/baeldung/peakelements/SinglePeakFinder.java new file mode 100644 index 0000000000..7b8cd76075 --- /dev/null +++ b/core-java-modules/core-java-collections-array-list-2/src/main/java/com/baeldung/peakelements/SinglePeakFinder.java @@ -0,0 +1,25 @@ +package com.baeldung.peakelements; + +public class SinglePeakFinder { + + public static int findSinglePeak(int[] arr) { + int n = arr.length; + + for (int i = 1; i < n - 1; i++) { + if (arr[i] > arr[i - 1] && arr[i] > arr[i + 1]) { + return arr[i]; + } + } + + if (arr[0] > arr[1]) { + return arr[0]; + } + + if (arr[n - 1] > arr[n - 2]) { + return arr[n - 1]; + } + + return -1; + } +} + diff --git a/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/MultiplePeakFinderUnitTest.java b/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/MultiplePeakFinderUnitTest.java new file mode 100644 index 0000000000..76564a2395 --- /dev/null +++ b/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/MultiplePeakFinderUnitTest.java @@ -0,0 +1,24 @@ +package com.baeldung.peakelements; + + +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +public class MultiplePeakFinderUnitTest { + + @Test + void findPeaks_givenArrayOfIntegers_whenValidInput_thenReturnsCorrectPeaks() { + MultiplePeakFinder finder = new MultiplePeakFinder(); + int[] array = {1, 13, 7, 0, 4, 1, 4, 45, 50}; + List peaks = finder.findPeaks(array); + + assertEquals(3, peaks.size()); + assertTrue(peaks.contains(4)); + assertTrue(peaks.contains(13)); + assertTrue(peaks.contains(50)); + } +} + diff --git a/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/PeakElementFinderUnitTest.java b/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/PeakElementFinderUnitTest.java new file mode 100644 index 0000000000..8ed6c9a991 --- /dev/null +++ b/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/PeakElementFinderUnitTest.java @@ -0,0 +1,42 @@ +package com.baeldung.peakelements; + +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +public class PeakElementFinderUnitTest { + + @Test + void findPeakElement_givenArrayOfIntegers_whenValidInput_thenReturnsCorrectPeakIndex() { + PeakElementFinder finder = new PeakElementFinder(); + int[] array = {5, 8, 7, 6, 12}; + List peaks = finder.findPeakElement(array); + assertEquals(2, peaks.size() ); + } + + @Test + void findPeakElement_givenArrayOfIntegers_whenNoPeaks_thenReturnsMinusOne() { + PeakElementFinder finder = new PeakElementFinder(); + int[] array = {5, 8, 7, 6, 12}; + List peaks = finder.findPeakElement(array); + assertEquals(2, peaks.size()); + } + + @Test + void findPeakElement_givenArrayOfIntegers_whenPeaksAtExtremes_thenReturnsCorrectPeakIndex() { + PeakElementFinder finder = new PeakElementFinder(); + int[] array = {5, 2, 1, 3, 4}; + List peaks = finder.findPeakElement(array); + assertEquals(2, peaks.size()); + } + + @Test + void findPeakElement_givenArrayOfIntegers_whenPlateaus_thenReturnsCorrectPeakIndex() { + PeakElementFinder finder = new PeakElementFinder(); + int[] array = {1, 2, 2, 2, 3, 4, 5}; + List peaks = finder.findPeakElement(array); + assertEquals(2, peaks.size()); + } +} diff --git a/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/SinglePeakFinderUnitTest.java b/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/SinglePeakFinderUnitTest.java new file mode 100644 index 0000000000..a847afa504 --- /dev/null +++ b/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/SinglePeakFinderUnitTest.java @@ -0,0 +1,13 @@ +package com.baeldung.peakelements; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; + +public class SinglePeakFinderUnitTest { + + @Test + void findSinglePeak_givenArrayOfIntegers_whenValidInput_thenReturnsCorrectPeak() { + int[] arr = {0, 10, 2, 4, 5, 1}; + assertEquals(10, SinglePeakFinder.findSinglePeak(arr)); + } +} From dfe98f620299d159ccf0012acd37e93b06dab2db Mon Sep 17 00:00:00 2001 From: Imran Alam <75203259+Imranalam28@users.noreply.github.com> Date: Fri, 1 Mar 2024 13:16:27 +0530 Subject: [PATCH 02/11] Update MultiplePeakFinder.java --- .../peakelements/MultiplePeakFinder.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/core-java-modules/core-java-collections-array-list-2/src/main/java/com/baeldung/peakelements/MultiplePeakFinder.java b/core-java-modules/core-java-collections-array-list-2/src/main/java/com/baeldung/peakelements/MultiplePeakFinder.java index 29956ba027..f8e13ee86e 100644 --- a/core-java-modules/core-java-collections-array-list-2/src/main/java/com/baeldung/peakelements/MultiplePeakFinder.java +++ b/core-java-modules/core-java-collections-array-list-2/src/main/java/com/baeldung/peakelements/MultiplePeakFinder.java @@ -12,11 +12,11 @@ public class MultiplePeakFinder { if (arr == null || arr.length == 0) { return peaks; } - findPeakElement(arr, 0, arr.length - 1, peaks); + findPeakElements(arr, 0, arr.length - 1, peaks, arr.length); return peaks; } - private static void findPeakElement(int[] arr, int low, int high, List peaks) { + private static void findPeakElements(int[] arr, int low, int high, List peaks, int length) { if (low > high) { return; @@ -24,17 +24,17 @@ public class MultiplePeakFinder { int mid = low + (high - low) / 2; - if ((mid == 0 || arr[mid] >= arr[mid - 1]) && (mid == arr.length - 1 || arr[mid] >= arr[mid + 1])) { - peaks.add(arr[mid]); - } - - if (mid > 0) { - findPeakElement(arr, low, mid - 1, peaks); - } - - if (mid < arr.length - 1) { - findPeakElement(arr, mid + 1, high, peaks); + boolean isPeak = (mid == 0 || arr[mid] > arr[mid - 1]) && (mid == length - 1 || arr[mid] > arr[mid + 1]); + boolean isFirstInSequence = mid > 0 && arr[mid] == arr[mid - 1] && arr[mid] > arr[mid + 1]; + + if (isPeak || isFirstInSequence) { + + if (!peaks.contains(arr[mid])) { + peaks.add(arr[mid]); + } } + findPeakElements(arr, low, mid - 1, peaks, length); + findPeakElements(arr, mid + 1, high, peaks, length); } } From 32873a43b15a577262760b42947bf2f657aef6fc Mon Sep 17 00:00:00 2001 From: Imran Alam <75203259+Imranalam28@users.noreply.github.com> Date: Fri, 1 Mar 2024 13:16:58 +0530 Subject: [PATCH 03/11] Update PeakElementFinder.java --- .../baeldung/peakelements/PeakElementFinder.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/core-java-modules/core-java-collections-array-list-2/src/main/java/com/baeldung/peakelements/PeakElementFinder.java b/core-java-modules/core-java-collections-array-list-2/src/main/java/com/baeldung/peakelements/PeakElementFinder.java index 963f505be5..c26871655c 100644 --- a/core-java-modules/core-java-collections-array-list-2/src/main/java/com/baeldung/peakelements/PeakElementFinder.java +++ b/core-java-modules/core-java-collections-array-list-2/src/main/java/com/baeldung/peakelements/PeakElementFinder.java @@ -4,7 +4,7 @@ import java.util.ArrayList; import java.util.List; public class PeakElementFinder { - public List findPeakElement(int[] arr) { + public List findPeakElements(int[] arr) { int n = arr.length; List peaks = new ArrayList<>(); @@ -16,6 +16,7 @@ public class PeakElementFinder { if (isPeak(arr, i, n)) { peaks.add(i); } + while (i < n - 1 && arr[i] == arr[i + 1]) { i++; } @@ -25,14 +26,19 @@ public class PeakElementFinder { } private boolean isPeak(int[] arr, int index, int n) { - if (index == 0) { return n > 1 ? arr[index] >= arr[index + 1] : true; } else if (index == n - 1) { return arr[index] >= arr[index - 1]; - } + } else if (arr[index] == arr[index + 1] && arr[index] > arr[index - 1]) { + int i = index; - return arr[index] >= arr[index - 1] && arr[index] >= arr[index + 1]; + while (i < n - 1 && arr[i] == arr[i + 1]) { + i++; + } + return i == n - 1 || arr[i] > arr[i + 1]; + } else { + return arr[index] >= arr[index - 1] && arr[index] >= arr[index + 1]; + } } } - From 1c2c1420038fc971075f761f39ee7312cfed768e Mon Sep 17 00:00:00 2001 From: Imran Alam <75203259+Imranalam28@users.noreply.github.com> Date: Fri, 1 Mar 2024 13:18:05 +0530 Subject: [PATCH 04/11] Update SinglePeakFinder.java --- .../peakelements/SinglePeakFinder.java | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/core-java-modules/core-java-collections-array-list-2/src/main/java/com/baeldung/peakelements/SinglePeakFinder.java b/core-java-modules/core-java-collections-array-list-2/src/main/java/com/baeldung/peakelements/SinglePeakFinder.java index 7b8cd76075..f7b7cfc72b 100644 --- a/core-java-modules/core-java-collections-array-list-2/src/main/java/com/baeldung/peakelements/SinglePeakFinder.java +++ b/core-java-modules/core-java-collections-array-list-2/src/main/java/com/baeldung/peakelements/SinglePeakFinder.java @@ -1,25 +1,30 @@ package com.baeldung.peakelements; -public class SinglePeakFinder { +import java.util.OptionalInt; - public static int findSinglePeak(int[] arr) { +public class SinglePeakFinder { + public static OptionalInt findSinglePeak(int[] arr) { int n = arr.length; + if (n < 2) { + return n == 0 ? OptionalInt.empty() : OptionalInt.of(arr[0]); + } + + if (arr[0] >= arr[1]) { + return OptionalInt.of(arr[0]); + } + for (int i = 1; i < n - 1; i++) { - if (arr[i] > arr[i - 1] && arr[i] > arr[i + 1]) { - return arr[i]; + if (arr[i] >= arr[i - 1] && arr[i] >= arr[i + 1]) { + return OptionalInt.of(arr[i]); } } - if (arr[0] > arr[1]) { - return arr[0]; + if (arr[n - 1] >= arr[n - 2]) { + return OptionalInt.of(arr[n - 1]); } - if (arr[n - 1] > arr[n - 2]) { - return arr[n - 1]; - } - - return -1; + return OptionalInt.empty(); } } From f353017b6557f8e04ab3237676ef6b231517eeb0 Mon Sep 17 00:00:00 2001 From: Imran Alam <75203259+Imranalam28@users.noreply.github.com> Date: Fri, 1 Mar 2024 13:19:03 +0530 Subject: [PATCH 05/11] Update MultiplePeakFinderUnitTest.java --- .../com/baeldung/peakelements/MultiplePeakFinderUnitTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/MultiplePeakFinderUnitTest.java b/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/MultiplePeakFinderUnitTest.java index 76564a2395..bc145c654d 100644 --- a/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/MultiplePeakFinderUnitTest.java +++ b/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/MultiplePeakFinderUnitTest.java @@ -1,6 +1,5 @@ package com.baeldung.peakelements; - import org.junit.jupiter.api.Test; import java.util.List; From 1155a6d8e842e901ce2606d05348569156546c3b Mon Sep 17 00:00:00 2001 From: Imran Alam <75203259+Imranalam28@users.noreply.github.com> Date: Fri, 1 Mar 2024 13:19:42 +0530 Subject: [PATCH 06/11] Update PeakElementFinderUnitTest.java --- .../peakelements/PeakElementFinderUnitTest.java | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/PeakElementFinderUnitTest.java b/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/PeakElementFinderUnitTest.java index 8ed6c9a991..9cd33d8aa0 100644 --- a/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/PeakElementFinderUnitTest.java +++ b/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/PeakElementFinderUnitTest.java @@ -8,19 +8,11 @@ import static org.junit.jupiter.api.Assertions.*; public class PeakElementFinderUnitTest { - @Test - void findPeakElement_givenArrayOfIntegers_whenValidInput_thenReturnsCorrectPeakIndex() { - PeakElementFinder finder = new PeakElementFinder(); - int[] array = {5, 8, 7, 6, 12}; - List peaks = finder.findPeakElement(array); - assertEquals(2, peaks.size() ); - } - @Test void findPeakElement_givenArrayOfIntegers_whenNoPeaks_thenReturnsMinusOne() { PeakElementFinder finder = new PeakElementFinder(); int[] array = {5, 8, 7, 6, 12}; - List peaks = finder.findPeakElement(array); + List peaks = finder.findPeakElements(array); assertEquals(2, peaks.size()); } @@ -28,7 +20,7 @@ public class PeakElementFinderUnitTest { void findPeakElement_givenArrayOfIntegers_whenPeaksAtExtremes_thenReturnsCorrectPeakIndex() { PeakElementFinder finder = new PeakElementFinder(); int[] array = {5, 2, 1, 3, 4}; - List peaks = finder.findPeakElement(array); + List peaks = finder.findPeakElements(array); assertEquals(2, peaks.size()); } @@ -36,7 +28,7 @@ public class PeakElementFinderUnitTest { void findPeakElement_givenArrayOfIntegers_whenPlateaus_thenReturnsCorrectPeakIndex() { PeakElementFinder finder = new PeakElementFinder(); int[] array = {1, 2, 2, 2, 3, 4, 5}; - List peaks = finder.findPeakElement(array); - assertEquals(2, peaks.size()); + List peaks = finder.findPeakElements(array); + assertEquals(1, peaks.size()); } } From 16b8708d25efc7c23962d143a5ce78f091621a6c Mon Sep 17 00:00:00 2001 From: Imran Alam <75203259+Imranalam28@users.noreply.github.com> Date: Fri, 1 Mar 2024 13:20:31 +0530 Subject: [PATCH 07/11] Update SinglePeakFinderUnitTest.java --- .../peakelements/SinglePeakFinderUnitTest.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/SinglePeakFinderUnitTest.java b/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/SinglePeakFinderUnitTest.java index a847afa504..f2448ec255 100644 --- a/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/SinglePeakFinderUnitTest.java +++ b/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/SinglePeakFinderUnitTest.java @@ -2,12 +2,23 @@ package com.baeldung.peakelements; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertTrue; +import java.util.OptionalInt; public class SinglePeakFinderUnitTest { @Test void findSinglePeak_givenArrayOfIntegers_whenValidInput_thenReturnsCorrectPeak() { int[] arr = {0, 10, 2, 4, 5, 1}; - assertEquals(10, SinglePeakFinder.findSinglePeak(arr)); + OptionalInt peak = SinglePeakFinder.findSinglePeak(arr); + assertTrue(peak.isPresent()); + assertEquals(10, peak.getAsInt()); + } + + @Test + void findSinglePeak_givenEmptyArray_thenReturnsEmptyOptional() { + int[] arr = {}; + OptionalInt peak = SinglePeakFinder.findSinglePeak(arr); + assertTrue(peak.isEmpty()); } } From 2f18d718104aa9f65f4eefc1cf4dd20ee0c046da Mon Sep 17 00:00:00 2001 From: Imran Alam <75203259+Imranalam28@users.noreply.github.com> Date: Wed, 6 Mar 2024 12:01:13 +0530 Subject: [PATCH 08/11] Update SinglePeakFinderUnitTest.java --- .../baeldung/peakelements/SinglePeakFinderUnitTest.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/SinglePeakFinderUnitTest.java b/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/SinglePeakFinderUnitTest.java index f2448ec255..9e4cea2c0e 100644 --- a/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/SinglePeakFinderUnitTest.java +++ b/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/SinglePeakFinderUnitTest.java @@ -21,4 +21,12 @@ public class SinglePeakFinderUnitTest { OptionalInt peak = SinglePeakFinder.findSinglePeak(arr); assertTrue(peak.isEmpty()); } + + @Test + void findSinglePeak_givenEqualElementArray_thenReturnsCorrectPeak() { + int[] arr = {-2, -2, -2, -2, -2}; + OptionalInt peak = SinglePeakFinder.findSinglePeak(arr); + assertTrue(peak.isPresent()); + assertEquals(-2, peak.getAsInt()); + } } From dd251d2d331eb2044bcd2ec69bfb5da92985590d Mon Sep 17 00:00:00 2001 From: Imran Alam <75203259+Imranalam28@users.noreply.github.com> Date: Wed, 6 Mar 2024 12:02:28 +0530 Subject: [PATCH 09/11] Update PeakElementFinderUnitTest.java --- .../com/baeldung/peakelements/PeakElementFinderUnitTest.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/PeakElementFinderUnitTest.java b/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/PeakElementFinderUnitTest.java index 9cd33d8aa0..8eab2d386f 100644 --- a/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/PeakElementFinderUnitTest.java +++ b/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/PeakElementFinderUnitTest.java @@ -14,6 +14,8 @@ public class PeakElementFinderUnitTest { int[] array = {5, 8, 7, 6, 12}; List peaks = finder.findPeakElements(array); assertEquals(2, peaks.size()); + assertTrue(peaks.contains(8)); + assertTrue(peaks.contains(12)); } @Test @@ -22,6 +24,8 @@ public class PeakElementFinderUnitTest { int[] array = {5, 2, 1, 3, 4}; List peaks = finder.findPeakElements(array); assertEquals(2, peaks.size()); + assertTrue(peaks.contains(5)); + assertTrue(peaks.contains(4)); } @Test @@ -30,5 +34,6 @@ public class PeakElementFinderUnitTest { int[] array = {1, 2, 2, 2, 3, 4, 5}; List peaks = finder.findPeakElements(array); assertEquals(1, peaks.size()); + assertTrue(peaks.contains(5)); } } From c204c4c0738a162ebd5d3963edcb489c2b09a146 Mon Sep 17 00:00:00 2001 From: Imran Alam <75203259+Imranalam28@users.noreply.github.com> Date: Wed, 6 Mar 2024 12:04:06 +0530 Subject: [PATCH 10/11] Update PeakElementFinder.java --- .../main/java/com/baeldung/peakelements/PeakElementFinder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java-collections-array-list-2/src/main/java/com/baeldung/peakelements/PeakElementFinder.java b/core-java-modules/core-java-collections-array-list-2/src/main/java/com/baeldung/peakelements/PeakElementFinder.java index c26871655c..857ae3b1b2 100644 --- a/core-java-modules/core-java-collections-array-list-2/src/main/java/com/baeldung/peakelements/PeakElementFinder.java +++ b/core-java-modules/core-java-collections-array-list-2/src/main/java/com/baeldung/peakelements/PeakElementFinder.java @@ -14,7 +14,7 @@ public class PeakElementFinder { for (int i = 0; i < n; i++) { if (isPeak(arr, i, n)) { - peaks.add(i); + peaks.add(arr[i]); } while (i < n - 1 && arr[i] == arr[i + 1]) { From b09f501333e6d193226cb564521ee85aaaddf741 Mon Sep 17 00:00:00 2001 From: Imran Alam <75203259+Imranalam28@users.noreply.github.com> Date: Wed, 6 Mar 2024 12:20:13 +0530 Subject: [PATCH 11/11] Update PeakElementFinderUnitTest.java --- .../PeakElementFinderUnitTest.java | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/PeakElementFinderUnitTest.java b/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/PeakElementFinderUnitTest.java index 8eab2d386f..fc521272b4 100644 --- a/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/PeakElementFinderUnitTest.java +++ b/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/peakelements/PeakElementFinderUnitTest.java @@ -9,17 +9,24 @@ import static org.junit.jupiter.api.Assertions.*; public class PeakElementFinderUnitTest { @Test - void findPeakElement_givenArrayOfIntegers_whenNoPeaks_thenReturnsMinusOne() { + void findPeakElement_givenArrayOfIntegers_whenValidInput_thenReturnsCorrectPeak() { PeakElementFinder finder = new PeakElementFinder(); - int[] array = {5, 8, 7, 6, 12}; + int[] array = {1, 2, 3, 2, 1}; List peaks = finder.findPeakElements(array); - assertEquals(2, peaks.size()); - assertTrue(peaks.contains(8)); - assertTrue(peaks.contains(12)); + assertEquals(1, peaks.size()); + assertTrue(peaks.contains(3)); } @Test - void findPeakElement_givenArrayOfIntegers_whenPeaksAtExtremes_thenReturnsCorrectPeakIndex() { + void findPeakElement_givenArrayOfIntegers_whenNoPeaks_thenReturnsEmptyList() { + PeakElementFinder finder = new PeakElementFinder(); + int[] array = {}; + List peaks = finder.findPeakElements(array); + assertEquals(0, peaks.size()); + } + + @Test + void findPeakElement_givenArrayOfIntegers_whenPeaksAtExtremes_thenReturnsCorrectPeak() { PeakElementFinder finder = new PeakElementFinder(); int[] array = {5, 2, 1, 3, 4}; List peaks = finder.findPeakElements(array); @@ -29,7 +36,7 @@ public class PeakElementFinderUnitTest { } @Test - void findPeakElement_givenArrayOfIntegers_whenPlateaus_thenReturnsCorrectPeakIndex() { + void findPeakElement_givenArrayOfIntegers_whenPlateaus_thenReturnsCorrectPeak() { PeakElementFinder finder = new PeakElementFinder(); int[] array = {1, 2, 2, 2, 3, 4, 5}; List peaks = finder.findPeakElements(array);