From d94c96c999aff83baf803fbc577b9628bce35210 Mon Sep 17 00:00:00 2001 From: NayanSaraff Date: Fri, 3 Oct 2025 10:09:18 +0530 Subject: [PATCH 1/4] Add MonotonicStack class with element retrieval methods --- .../stacks/Monotonic_Increasing_Stack.java | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/test/java/com/thealgorithms/stacks/Monotonic_Increasing_Stack.java diff --git a/src/test/java/com/thealgorithms/stacks/Monotonic_Increasing_Stack.java b/src/test/java/com/thealgorithms/stacks/Monotonic_Increasing_Stack.java new file mode 100644 index 000000000000..e9f346ca3ca5 --- /dev/null +++ b/src/test/java/com/thealgorithms/stacks/Monotonic_Increasing_Stack.java @@ -0,0 +1,55 @@ +import java.util.*; + +public class MonotonicStack { + + // Returns Next Greater Element for each element in the array + public static int[] nextGreaterElement(int[] arr) { + int n = arr.length; + int[] result = new int[n]; + Stack stack = new Stack<>(); // stores indices + + for (int i = n - 1; i >= 0; i--) { + // Pop elements smaller or equal to arr[i] + while (!stack.isEmpty() && arr[i] >= arr[stack.peek()]) { + stack.pop(); + } + + // If stack is empty, no greater element to the right + result[i] = stack.isEmpty() ? -1 : arr[stack.peek()]; + + // Push current index onto stack + stack.push(i); + } + + return result; + } + + // Returns Next Smaller Element for each element in the array + public static int[] nextSmallerElement(int[] arr) { + int n = arr.length; + int[] result = new int[n]; + Stack stack = new Stack<>(); // stores indices + + for (int i = n - 1; i >= 0; i--) { + // Pop elements greater or equal to arr[i] + while (!stack.isEmpty() && arr[i] <= arr[stack.peek()]) { + stack.pop(); + } + + result[i] = stack.isEmpty() ? -1 : arr[stack.peek()]; + stack.push(i); + } + + return result; + } + + public static void main(String[] args) { + int[] arr = {4, 5, 2, 10, 8}; + + int[] nextGreater = nextGreaterElement(arr); + int[] nextSmaller = nextSmallerElement(arr); + + System.out.println("Next Greater Element: " + Arrays.toString(nextGreater)); + System.out.println("Next Smaller Element: " + Arrays.toString(nextSmaller)); + } +} From 8bd26a1afe9e85c342596a2097e578390e1982ae Mon Sep 17 00:00:00 2001 From: NayanSaraff Date: Fri, 3 Oct 2025 10:12:15 +0530 Subject: [PATCH 2/4] Rename Monotonic_Increasing_Stack.java to MonotonicIncreasingStack.java --- ...otonic_Increasing_Stack.java => MonotonicIncreasingStack.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/test/java/com/thealgorithms/stacks/{Monotonic_Increasing_Stack.java => MonotonicIncreasingStack.java} (100%) diff --git a/src/test/java/com/thealgorithms/stacks/Monotonic_Increasing_Stack.java b/src/test/java/com/thealgorithms/stacks/MonotonicIncreasingStack.java similarity index 100% rename from src/test/java/com/thealgorithms/stacks/Monotonic_Increasing_Stack.java rename to src/test/java/com/thealgorithms/stacks/MonotonicIncreasingStack.java From 8cfd530dc59cdd049944b805528d8e3e5a461cd1 Mon Sep 17 00:00:00 2001 From: NayanSaraff Date: Fri, 3 Oct 2025 10:13:49 +0530 Subject: [PATCH 3/4] Add comments to MonotonicIncreasingStack.java Added a comment block explaining the Monotonic Increasing Stack algorithm and its applications. --- .../com/thealgorithms/stacks/MonotonicIncreasingStack.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/test/java/com/thealgorithms/stacks/MonotonicIncreasingStack.java b/src/test/java/com/thealgorithms/stacks/MonotonicIncreasingStack.java index e9f346ca3ca5..58d653e0666d 100644 --- a/src/test/java/com/thealgorithms/stacks/MonotonicIncreasingStack.java +++ b/src/test/java/com/thealgorithms/stacks/MonotonicIncreasingStack.java @@ -1,3 +1,9 @@ +/*Contributor: Nayan Saraff + +This Monotonic Increasing Stack is a popular algorithm which helps +in solving various problems including the Stock Span, Trapping Rain water*/ + + import java.util.*; public class MonotonicStack { From e52b2edae71c51b17dd0560a95452297a8477d34 Mon Sep 17 00:00:00 2001 From: NayanSaraff Date: Fri, 3 Oct 2025 10:16:09 +0530 Subject: [PATCH 4/4] Add reference link for monotonic stack implementation Added a comment with a reference link for monotonic stack. --- .../java/com/thealgorithms/stacks/MonotonicIncreasingStack.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/test/java/com/thealgorithms/stacks/MonotonicIncreasingStack.java b/src/test/java/com/thealgorithms/stacks/MonotonicIncreasingStack.java index 58d653e0666d..aad1603b6169 100644 --- a/src/test/java/com/thealgorithms/stacks/MonotonicIncreasingStack.java +++ b/src/test/java/com/thealgorithms/stacks/MonotonicIncreasingStack.java @@ -59,3 +59,5 @@ public static void main(String[] args) { System.out.println("Next Smaller Element: " + Arrays.toString(nextSmaller)); } } + +/* https://www.geeksforgeeks.org/dsa/introduction-to-monotonic-stack-2/ */