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] 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]; + } } } -