What if you could always know the smallest item in your stack instantly, no matter how many times you add or remove items?
Why Min Stack Design in DSA Java?
Imagine you have a stack of books, and you want to quickly find the smallest book without taking all books out one by one.
Checking each book manually every time to find the smallest one is slow and tiring. You might forget which was smallest after adding or removing books.
A Min Stack keeps track of the smallest book at every step, so you can always see the smallest book instantly without searching.
Stack<Integer> stack = new Stack<>(); // To find min, loop through stack each time int min = Integer.MAX_VALUE; for (int val : stack) { if (val < min) min = val; }
class MinStack { Stack<Integer> stack = new Stack<>(); Stack<Integer> minStack = new Stack<>(); void push(int val) { stack.push(val); if (minStack.isEmpty() || val <= minStack.peek()) minStack.push(val); } int getMin() { return minStack.peek(); } }
You can get the smallest item instantly at any time, even after many adds and removes.
In a game, quickly knowing the lowest score so far helps decide who is winning without checking all scores again.
Manual search for minimum is slow and error-prone.
Min Stack keeps track of minimum efficiently.
Instant access to minimum value after any operation.
Practice
Min Stack data structure?Solution
Step 1: Understand stack operations
A stack supports push, pop, and top operations in LIFO order.Step 2: Identify Min Stack feature
Min Stack extends stack by allowing retrieval of minimum element in O(1) time.Final Answer:
To retrieve the minimum element in constant time along with stack operations -> Option AQuick Check:
Min Stack = constant time min retrieval [OK]
- Thinking Min Stack sorts elements automatically
- Assuming Min Stack stores only minimum elements
- Confusing Min Stack with reversing stack order
val onto a Min Stack?Solution
Step 1: Recall Java method syntax
Java method signature starts with access modifier, return type, method name, and parameters.Step 2: Check each option
public void push(int val) follows correct syntax: public void push(int val). Others have wrong order or return type.Final Answer:
public void push(int val) -> Option CQuick Check:
Java method syntax = public void push(int val) [OK]
- Placing 'public' after method name
- Using wrong return type for void methods
- Incorrect parameter placement
MinStack minStack = new MinStack(); minStack.push(3); minStack.push(5); minStack.push(2); minStack.push(1); minStack.pop(); int min = minStack.getMin(); System.out.println(min);
What will be printed?
Solution
Step 1: Trace push operations and min values
Push 3 (min=3), push 5 (min=3), push 2 (min=2), push 1 (min=1).Step 2: Pop removes top (1), min updates to previous min (2), then getMin returns 2.
Final Answer:
2 -> Option AQuick Check:
After pop, min = 2 [OK]
- Assuming min stays 1 after pop
- Confusing top element with min
- Ignoring min update on pop
public void pop() {
if(stack.isEmpty()) return;
int top = stack.pop();
if(top == minStack.peek()) {
minStack.pop();
}
}What is the main issue here?
Solution
Step 1: Analyze pop method safety
Before calling minStack.peek(), we must ensure minStack is not empty to avoid error.Step 2: Identify missing empty check on minStack
Code checks stack but not minStack emptiness before peek, risking exception.Final Answer:
It does not handle empty minStack before peek -> Option DQuick Check:
Check minStack empty before peek [OK]
- Ignoring minStack empty check
- Popping stack twice
- Confusing peek and pop methods
push, pop, top, and getMin all in constant time. Which approach is best?Solution
Step 1: Understand time complexity requirements
All operations must be O(1), so scanning or traversing is not allowed.Step 2: Evaluate approaches
Two stacks approach keeps track of minimums efficiently in O(1) time.Final Answer:
Use two stacks: one for all values, one for current minimums -> Option BQuick Check:
Two stacks = O(1) min retrieval [OK]
- Using scanning which is O(n)
- Using queue which is not stack
- Traversing linked list on getMin
Ready to prove it?
Pass the test and this pattern moves unknown
