Woodstock Blog

a tech blog for general algorithmic interview questions

[LeetCode 155] Min Stack

Question

link

Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.

  • push(x) -- Push element x onto stack.
  • pop() -- Removes the element on top of the stack.
  • top() -- Get the top element.
  • getMin() -- Retrieve the minimum element in the stack.

Show Tags
Stack Data Structure sn’t look possible to go to left half or right half by doing constant number of comparisons at the mSolution

Analysis

I’ve already cover this question in another post [Question] Min Stack.

My Code

class MinStack {

    Stack<Integer> stack = new Stack<Integer>();
    Stack<Integer> min = new Stack<Integer>();

    public void push(int x) {
        stack.push(x);
        if (min.isEmpty() || min.peek() >= x) {
            min.push(x);
        }
    }

    public void pop() {
        if (stack.isEmpty()) {
            return;
        }
        int topNum = stack.pop();
        if (topNum == min.peek()) {
            min.pop();
        }
    }

    public int top() {
        if (stack.isEmpty()) {
            return 0;
        }
        return stack.peek();
    }

    public int getMin() {
        if (min.isEmpty()) {
            return 0;
        }
        return min.peek();
    }
}