import java.util.Stack; public class Solution { Stack<Integer> stack = new Stack<Integer>(); int min; public void push(int node) { if(stack.isEmpty()) { min = node; stack.push(node); return; } if(node > min) { stack.push(node); return; } //当前插入的node是最小值时,将前一个最小值先一步再次压入栈,这样当最小值出栈时能立马知道下一个最小值是谁 stack.push(min); stack.push(node); min = node; } public void pop() { if(!stack.isEmpty() && stack.peek() == min) {//出栈的是最小值 //出栈时,先将最小值出栈。这时下一个node就是新的最小值 stack.pop(); min = stack.peek(); stack.pop(); return; } stack.pop(); } public int top() { return stack.peek(); } public int min() { return min; } }