解法一:同步辅助栈

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<>();