Introduction
The Next Greater Element problem involves finding the first greater element to the right of every array element.
Given an array:
[arr1, arr2, arr3 ...]the task is to:
- find the next greater element
for every position
If no greater element exists:
- return -1
This problem is one of the most important applications of:
Monotonic StackThis problem helps in understanding:
- stack optimization
- linear traversal
- next greater patterns
- efficient searching
Example
Input:arr = [4,5,2,10]
Output: [5,10,10,-1]
Explanation: 4 → next greater is 5
5 → next greater is 10
2 → next greater is 10
10 → no greater element
Constraints
1 <= arr.length <= 10^5-10^9 <= arr[i] <= 10^9Approach 1 : Brute Force Traversal
Explanation
The simplest way is:
- Traverse every element
- Search right side
- Find first greater element
This works but repeated searching becomes inefficient.
Steps
- Traverse array.
- For each element:
- search right side
- Store first greater element.
- Return answer array.
Dry Run
Input:[4,5,2,10]
For 4:
5 is greater
For 5: 10 is greater
For 2: 10 is greater
For 10: No greater element
Result:
[5,10,10,-1]
Brute Force Code
Complexity Analysis
Time Complexity: O(n²)
Explanation:
Nested traversal occurs repeatedly.
Space Complexity: O(1)
Explanation:
Only output array is used.Approach 2 : Monotonic Stack
Explanation
The optimized solution uses:
Monotonic Decreasing StackIdea:
- maintain decreasing stack
- whenever larger element appears:
- it becomes next greater element
Process:
- Traverse from right to left
- Remove smaller elements
- Stack top becomes next greater element
- Push current element
This avoids repeated searching.
Steps
- Create stack.
- Traverse array from right.
- Remove smaller elements.
- Store next greater element.
- Push current element.
Dry Run
Input:[4,5,2,10]
Traverse from right:
10 → no greater
Stack:
[10]
2 → next greater is 10
Stack: [10,2] 5 → remove 2
Next greater: 10
4 → next greater:
5
Final Result:
[5,10,10,-1]
Monotonic Stack Code
Complexity Analysis
Time Complexity: O(n)
Explanation:
Each element is pushed and popped once.
Space Complexity: O(n)
Explanation:
Stack stores array elements.