Design a stack to support push, pop, and retrieving the minimum?
element in constant time
public class MinStack {
private Stack<int> stack = new Stack<int>();
private Stack<int> minStack = new Stack<int>();
Follow on:
public void Push(int x) {
stack.Push(x);
if (minStack.Count == 0 || x <= minStack.Peek())
minStack.Push(x);
public void Pop() {
if (stack.Peek() == minStack.Peek())
minStack.Pop();
stack.Pop();
public int Top() {
return stack.Peek();
public int GetMin() {
return minStack.Peek();
Explanation:
Use two stacks: one normal stack, one for minimum values. When pushing a smaller or
equal value, push it on minStack; when popping, pop minStack if needed.