class Solution2 {
    private Stack<Integer> stack1 = new Stack<Integer>();//用来存放数据
    private Integer min = Integer.MAX_VALUE;//用来存放最小值

    public void push(int value) {

        if(stack1.empty()){
            stack1.push(value);
            min = value;
        }
        else{
            stack1.push(value);
            if(min > value){
                min = value;
            }
        }
    }

    public void pop() {
        stack1.pop();

    }

    public int top() {
        return stack1.peek();
    }

    public int min() {
        return min;
    }
}


class Solution1 {
    private Stack<Integer> stack1,stack2;

    public void push(int value) {
        stack1.push(value);
        if(stack2.empty())
            stack2.push(value);
        else if(value<=stack2.peek())
        {
            stack2.push(value);
        }
    }

    public void pop() {
        if(stack1.peek()==stack2.peek())
            stack2.pop();
        stack1.pop();

    }

    public int top() {
        return stack1.peek();
    }

    public int min() {
        return stack2.peek();
    }
}

由于要求是O(1)的复杂度,因此在存放的时候就需要保证最小的值的实时更新,这难度不大,主要是能不能想到这一点,存入数据的时候就进行最小值的判断,