155. Min Stack

Description

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.

Constraints

  • Methods pop, top and getMin operations will always be called on non-empty stacks.

Approach

  • GeeksforGeeks

  • ProgramCreek

  • YouTube

Examples

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

Solutions

/**
 * Time complexity : 
 * Space complexity : 
 */

class MinStack {
    
    private LinkedList<Integer> list;
    private int min = Integer.MAX_VALUE;

    /** initialize your data structure here. */
    public MinStack() {
        list = new LinkedList();
    }
    
    public void push(int x) {
        if(x < min) min = x;
        list.add(x);
    }
    
    public void pop() {
        if(list.isEmpty()) return;
        if(list.removeLast() == min) {
            min = Integer.MAX_VALUE;
            for(int n: list) {
                if(n < min) min = n;
            }
        }
    }
    
    public int top() {
        if(list.isEmpty()) return -1;
        return list.peekLast();
    }
    
    public int getMin() {
        return min;
    }
}

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack obj = new MinStack();
 * obj.push(x);
 * obj.pop();
 * int param_3 = obj.top();
 * int param_4 = obj.getMin();
 */

Follow up

Last updated

Was this helpful?