7. Min Stack
easyAsked at RappiDesign a stack that supports push, pop, top, and retrieving the minimum in constant time — Rappi frames this as tracking the lowest-ETA candidate in a dispatch queue without rescanning.
By Sam K., Founder, InterviewChamp.AI · Last verified
Problem
Implement a class MinStack with push(x), pop(), top(), and getMin() — every operation must run in O(1) time.
Constraints
-2^31 <= val <= 2^31 - 1All methods must be O(1)
Examples
Example 1
push(-2), push(0), push(-3), getMin()-3Example 2
pop(), top(), getMin()0, -2Approaches
1. Rescan on getMin
Store values in a normal stack and scan all elements on each getMin call.
- Time
- O(n) per getMin
- Space
- O(n)
class MinStack {
constructor() { this.s = []; }
push(x) { this.s.push(x); }
pop() { this.s.pop(); }
top() { return this.s.at(-1); }
getMin() { return Math.min(...this.s); }
}Tradeoff:
2. Paired min stack
Maintain a parallel stack whose top always holds the running minimum, updated on every push and pop.
- Time
- O(1)
- Space
- O(n)
class MinStack {
constructor() { this.s = []; this.m = []; }
push(x) { this.s.push(x); this.m.push(this.m.length ? Math.min(x, this.m.at(-1)) : x); }
pop() { this.s.pop(); this.m.pop(); }
top() { return this.s.at(-1); }
getMin() { return this.m.at(-1); }
}Tradeoff:
Rappi-specific tips
Rappi will explicitly test that getMin stays O(1) under spike load — the paired-stack invariant is the standard answer their dispatch service uses for lowest-ETA tracking.
Solve it now
Free. No sign-up. Python and JavaScript run instantly in your browser.
More Rappi coding interview questions
- 1. Two Sum
- 2. Same Tree
- 3. Maximum Depth of Binary Tree
- 4. Best Time to Buy and Sell Stock
- 5. Single Number
- 6. Linked List Cycle
- 8. Majority Element
- 9. Number of Islands