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.
Solution:
1 class MinStack { 2 Stack<Integer> stack; 3 int curMin; 4 Stack<Integer> minStack; 5 6 7 public MinStack(){ 8 stack = new Stack<Integer>(); 9 curMin = Integer.MAX_VALUE; 10 minStack = new Stack<Integer>(); 11 } 12 13 14 public void push(int x) { 15 stack.push(x); 16 if (x<=curMin){ 17 minStack.push(x); 18 curMin = x; 19 } 20 } 21 22 public void pop() { 23 int val = stack.peek(); 24 stack.pop(); 25 if (val==curMin){ 26 minStack.pop(); 27 if (!minStack.isEmpty()) 28 curMin = minStack.peek(); 29 else curMin = Integer.MAX_VALUE; 30 31 } 32 } 33 34 public int top() { 35 return stack.peek(); 36 37 } 38 39 public int getMin() { 40 return curMin; 41 } 42 }