public class Solution {

    //注意时间复杂度是O(1) 所以采用双栈
    private Stack<Integer> stack = new Stack();
    //最小栈的栈顶元素永远放最小
    private Stack<Integer> minStack = new Stack();
    public void push(int node) {
        stack.push(node);
        if(minStack.isEmpty()){
            minStack.push(node);
        } else {
            int top = minStack.peek();
            minStack.push(Math.min(top,node));
        }
    }
    
    public void pop() {
        stack.pop();
        minStack.pop();
    }
    
    public int top() {
        return stack.peek();
    }
    
    public int min() {
        return minStack.peek();
    }
}