Stack<Integer> mainStack = new Stack<Integer>();
Stack<Integer> supportStack = new Stack<Integer>();
public void push(int node) {
//主栈正常pop和push
mainStack.push(node);
if (supportStack.empty()){
supportStack.push(node); //辅助栈空的时候只进行push操作
}else if(supportStack.peek()>node) {
supportStack.push(node); //如果当前node比辅助栈的top值小就把node压入辅助栈中
} else {
//这里是最核心的部分,如果要压入的node比当前的最小值大,就重复压入最小值
//这样就表明,这个元素以前的这一小段栈最小值是多少,当这个元素被pop出去的时候
//相当于给主栈中的每个元素打一个标记,这个标记就是该元素入栈时最小值是多少
//这个标记会随着元素的pop而pop出去
supportStack.push(supportStack.peek());
}
}
public void pop() {
mainStack.pop();
supportStack.pop();
}
public int top() {
return mainStack.peek();
}
public int min() {
return supportStack.peek();
}