Min Stack
Implement a stack with min() function, which will return the smallest number in the stack.
It should support push, pop and min operation all in O(1) cost.
Example
push(1)
pop() // return 1
push(2)
push(3)
min() // return 2
push(1)
min() // return 1
Note
min operation will never be called if there is no number in the stack.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | public class MinStack { private Stack<Integer> stack; private Stack<Integer> minStack; public MinStack() { // do initialize if necessary stack = new Stack<Integer>(); minStack = new Stack<Integer>(); } public void push(int number) { // write your code here if (stack.empty()) { stack.push(number); minStack.push(number); } else { stack.push(number); minStack.push(Math.min(number, minStack.peek())); } } public int pop() { // write your code here minStack.pop(); return stack.pop(); } public int min() { // write your code here return minStack.peek(); } } |