/**
* 本题大体思路:
* 生成两个栈,一个栈stack1正常装数据,另一个栈stack2装当时最小的数据
* 比如:
* [7,6,5,8,3]
* 从第一个数据开始装入,
* stack1[7]
* stack27
* 第二个数据开始装入,
* stack1[7,6]
* stack27,6
* 第三个数据开始装入,
* stack1[7,6,5]
* stack27,6,5
* 第四个数据开始装入,
* stack1[7,6,5,8]
* stack27,6,5,5
* 第五个数据...
*/
import java.util.Stack;

public class Solution {

Stack<Integer> stack1 = new Stack<>();
Stack<Integer> stack2 = new Stack<>();
public void push(int val) {
    stack1.push(val);
    if (stack2.isEmpty()) {
        stack2.push(val);
    } else if (stack2.peek() >= val) {
        stack2.push(val);
    } else {
        stack2.push(stack2.peek());
    }
}

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

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

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

}