Discover how a simple stack can save you from endless comparisons and speed up your search for the next bigger number!
Why Next Greater Element Using Stack in DSA Typescript?
Imagine you have a list of daily temperatures and you want to know for each day when the next warmer day will be. Doing this by checking each day against all future days manually is like looking through a messy drawer trying to find the next bigger item one by one.
Manually comparing each element with all the elements after it takes a lot of time and effort. It's slow because you keep repeating the same checks, and it's easy to make mistakes or miss some comparisons, especially with long lists.
Using a stack helps keep track of elements waiting for their next bigger element. We only compare with the most recent elements that haven't found their next bigger one yet. This way, we avoid repeated checks and find the answer quickly and cleanly.
for (let i = 0; i < arr.length; i++) { for (let j = i + 1; j < arr.length; j++) { if (arr[j] > arr[i]) { result[i] = arr[j]; break; } } }
const stack: number[] = []; for (let i = 0; i < arr.length; i++) { while (stack.length && arr[i] > arr[stack[stack.length - 1]]) { const index = stack.pop()!; result[index] = arr[i]; } stack.push(i); }
This method lets you quickly find the next bigger element for every item in a list, making problems like stock prices, temperatures, or game scores easy to solve.
Think about checking the weather forecast: for each day, you want to know when a warmer day will come next. Using this stack method, you can instantly find that for every day without checking all future days repeatedly.
Manual checking is slow and repetitive.
Stack keeps track of elements waiting for their next bigger one.
Efficiently finds next greater elements in one pass.
Practice
Solution
Step 1: Understand the problem goal
The Next Greater Element problem aims to find, for each element, the first element to its right that is larger than it.Step 2: Identify the role of the stack
A stack helps efficiently track elements for which we haven't found a greater element yet, allowing us to find the next greater element in one pass.Final Answer:
The first greater element to the right of each element -> Option BQuick Check:
Next Greater Element = first bigger right element [OK]
- Confusing next greater with next smaller element
- Searching to the left instead of right
- Thinking it sums elements instead of finding one
Solution
Step 1: Identify correct stack data structure
For Next Greater Element, a stack is an array used with push/pop. So, an empty array of numbers is correct.Step 2: Check TypeScript syntax
const stack: number[] = []; correctly declares an empty number array stack.Final Answer:
const stack: number[] = []; -> Option CQuick Check:
Stack = number array [] [OK]
- Using object {} instead of array for stack
- Initializing stack as null
- Using Map which is not a stack
[4, 5, 2, 25]?Solution
Step 1: Process each element to find next greater
4's next greater is 5, 5's next greater is 25, 2's next greater is 25, 25 has none so -1.Step 2: Form the output array
Output array is [5, 25, 25, -1].Final Answer:
[5, 25, 25, -1] -> Option AQuick Check:
Next Greater Element for [4,5,2,25] = [5,25,25,-1] [OK]
- Assigning -1 too early
- Mixing up order of elements
- Confusing next greater with next smaller
function nextGreater(arr: number[]): number[] {
const stack: number[] = [];
const result: number[] = new Array(arr.length).fill(-1);
for (let i = 0; i < arr.length; i++) {
while (stack.length && arr[stack[stack.length]] < arr[i]) {
const index = stack.pop();
result[index] = arr[i];
}
stack.push(i);
}
return result;
}Solution
Step 1: Check stack top element access
stack[stack.length] is undefined because array indices go from 0 to length-1. Correct is stack[stack.length - 1].Step 2: Confirm other parts are correct
Result array initialization and loop direction are correct. Stack stores indices as expected.Final Answer:
Incorrect stack top access: should be stack[stack.length - 1] -> Option DQuick Check:
Stack top index = stack[stack.length - 1] [OK]
- Using stack[stack.length] which is undefined
- Initializing result with wrong default
- Reversing loop unnecessarily
[13, 7, 6, 12], what is the Next Greater Element array using a stack approach?Solution
Step 1: Find next greater for each element
13 has no greater element to right, so -1. 7's next greater is 12. 6's next greater is 12. 12 has none, so -1.Step 2: Write the output array
The result is [-1, 12, 12, -1].Final Answer:
[-1, 12, 12, -1] -> Option AQuick Check:
Next Greater Element for [13,7,6,12] = [-1,12,12,-1] [OK]
- Assigning wrong next greater for 13
- Mixing up indices and values
- Confusing next greater with previous greater
Ready to prove it?
Pass the test and this pattern moves unknown
