155. Min Stack
At a Glance
- Topic: Stack
- Pattern: Analyze Pattern
- Difficulty: Medium
- LeetCode: 155
Problem Statement
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 a solution with O(1) time complexity for each function.
Example 1:
Input ["MinStack","push","push","push","getMin","pop","top","getMin"] [[],[-2],[0],[-3],[],[],[],[]]
Output [null,null,null,null,-3,null,0,-2]
Explanation MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.getMin(); // return -3 minStack.pop(); minStack.top(); // return 0 minStack.getMin(); // return -2
Constraints:
-231 <= val <= 231 - 1
Methods pop, top and getMin op...Approach & Solution Steps
- Brute force — scan entire stack for min —
O(n)pergetMin. - Better — heap — breaks LIFO pairing unless augmented.
- Optimal —
O(1)push/pop/min — parallel min-stack storing minimum snapshot per depth.
Optimal JS Solution
class MinStack {
constructor() {
this.values = [];
this.minValues = [];
}
push(value) {
this.values.push(value);
const priorMin = this.minValues.at(-1);
if (this.minValues.length === 0 || value <= priorMin) {
this.minValues.push(value);
}
}
pop() {
const top = this.values.pop();
if (top === this.minValues.at(-1)) {
this.minValues.pop();
}
}
top() {
return this.values.at(-1);
}
getMin() {
return this.minValues.at(-1);
}
}Edge Cases & Pitfalls
- Always consider empty or null inputs.
- Watch out for off-by-one index errors.
Mark this page when you finish learning it.
Last updated on
Spotted something unclear or wrong on this page?