THN Interview Prep

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) per getMin.
  • Better — heap — breaks LIFO pairing unless augmented.
  • OptimalO(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?

On this page