解法一:同步辅助栈
 import java.util.Stack;
public class Solution {  
    Stack<Integer> stack=new Stack<>();
    Stack<Integer> helper=new Stack<>();
    public void push(int node) {
        stack.push(node);
        if(helper.isEmpty()) helper.push(node);
        else helper.push(Math.min(helper.peek(),node));
    }
    public void pop() {
        stack.pop();
        helper.pop();
    }
    public int top() {
        return stack.peek();
    }
    public int min() {
        return helper.peek();
    }
}解法二:非同步辅助栈
 import java.util.Stack;
public class Solution {  
    Stack<Integer> stack=new Stack<>();
    Stack<Integer> helper=new Stack<>();
    public void push(int node) {
        stack.push(node);
        if(helper.isEmpty()||helper.peek()>=node)
            helper.push(node);
    }
    public void pop() {
        int t=stack.pop();
        if(t==helper.peek()) helper.pop();
    }
    public int top() {
        return stack.peek();
    }
    public int min() {
        return helper.peek();
    }
}
Java中栈的推荐使用方法
 Deque<T> stack=new ArrayDeque<>();