using distance to keep track of the min in a stack
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.
Example:
MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.getMin(); --> Returns -3. minStack.pop(); minStack.top(); --> Returns 0. minStack.getMin(); --> Returns -2.
public class MinStack { int min; Stack<Integer> stack; /** initialize your data structure here. */ public MinStack() { stack = new Stack<>(); } public void push(int x) { if(stack.isEmpty()){ min = x; stack.push(0); }else{ stack.push(x-min); if(x < min) min = x; } } public void pop() { if(stack.isEmpty()) return; else{ int pop = stack.pop(); if(pop < 0) min = min -pop; } } public int top() { int top = stack.peek(); if(top < 0) return min; else{ return min + top; } } public int getMin() { return min; } }