Algorithm Day71 - Min Stack
🧩 Problem Description
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
Implement the MinStack
class:
MinStack()
initializes the stack object.void push(int val)
pushes the element val onto the stack.void pop()
removes the element on the top of the stack.int top()
gets the top element of the stack.int getMin()
retrieves the minimum element in the stack.
You must implement all the functions of the stack such that each function works in O(1) time complexity.
💬 Examples
Example 1
1 | Input |
💡 Intuition
We need a stack that can return the minimum element in constant time.
- Use two stacks:
- One for storing all values.
- Another for storing the current minimum at each level.
- When pushing, also update the min stack with the smaller value between new element and current min.
- When popping, remove from both stacks.
🔢 Java Code (Two Stacks)
1 | import java.util.*; |
⏱ Complexity Analysis
- Time: O(1) for all operations (push, pop, top, getMin).
- Space: O(n) — extra stack to track minimums.
✍️ Summary
- Maintain a parallel min stack to track current minimum.
- Ensures constant time retrieval of min element.
Related problems
lc-716
— Max Stacklc-20
— Valid Parentheses