21. Min Stack
easyAsked at RedditDesign a stack that supports push, pop, top, and getMin in O(1). Reddit uses this to test data-structure design — the same auxiliary-state pattern they use to maintain hottest-comment-so-far while streaming an active comment thread.
By Sam K., Founder, InterviewChamp.AI · Last verified
Source citations
Public interview reports confirming this problem appears in Reddit loops.
- Glassdoor (2026-Q1)— Reddit infra phone screen.
- Blind (2025-12)— Reported on Reddit comments-team rounds as a design warm-up.
Problem
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. Implement the MinStack class: push(val), pop(), top(), getMin().
Constraints
-2^31 <= val <= 2^31 - 1Methods pop, top and getMin operations will always be called on non-empty stacks.At most 3 * 10^4 calls will be made to push, pop, top, and getMin.
Examples
Example 1
["MinStack","push","push","push","getMin","pop","top","getMin"] [[],[-2],[0],[-3],[],[],[],[]][null,null,null,null,-3,null,0,-2]Approaches
1. Recompute min on getMin
Single array as stack. getMin scans entire stack.
- Time
- O(1) push/pop, O(n) getMin
- Space
- O(n)
class MinStack {
constructor() { this.stack = []; }
push(v) { this.stack.push(v); }
pop() { this.stack.pop(); }
top() { return this.stack[this.stack.length - 1]; }
getMin() { return Math.min(...this.stack); }
}Tradeoff: Fails the constant-time getMin requirement.
2. Parallel min stack (optimal)
Maintain a second stack that holds the running min. Push min(val, current min) on every push. Pop in lockstep.
- Time
- O(1) all ops
- Space
- O(n)
class MinStack {
constructor() {
this.stack = [];
this.minStack = [];
}
push(val) {
this.stack.push(val);
const min = this.minStack.length ? this.minStack[this.minStack.length - 1] : val;
this.minStack.push(Math.min(min, val));
}
pop() {
this.stack.pop();
this.minStack.pop();
}
top() { return this.stack[this.stack.length - 1]; }
getMin() { return this.minStack[this.minStack.length - 1]; }
}Tradeoff: Constant time per op, 2x memory. Trade memory for time — typical Reddit infra trade-off.
Reddit-specific tips
Reddit interviewers expect you to discuss the memory trade-off. Bonus signal: mention an optimization — only push to minStack when val <= current min, and track count for duplicates. Saves space when values are mostly increasing.
Common mistakes
- Pushing Math.min instead of the new value to the main stack.
- Forgetting to push to minStack on first push (empty case).
- Comparing values without handling negative numbers carefully (Math.min handles this fine).
Follow-up questions
An interviewer at Reddit may pivot to one of these next:
- Implement Max Stack with O(1) max — same pattern.
- Implement Queue with O(1) min/max — needs deque.
- Sliding window minimum (LC 239).
Solve it now
Free. No sign-up. Python and JavaScript run instantly in your browser.
FAQ
Why a parallel stack instead of storing (val, currentMin) pairs?
Same space. Slightly more cache-coherent. But the parallel-array form generalizes to a max stack and beyond.
Optimization: when is it safe to skip pushing to minStack?
Push only when val < current min. On pop, decrement only if you're popping the current min value. Saves space when the input is mostly ascending.
More Reddit coding interview questions
- 1. Two Sum
- 2. Valid Parentheses
- 3. Merge Two Sorted Lists
- 4. Remove Duplicates from Sorted Array
- 5. Remove Element
- 6. Search Insert Position
- 7. Maximum Subarray
- 8. Plus One