1、先将元素压入到 stack 中,若当前的 minStack 中没有元素。则当前的元素为最小值。

2、将最小压入到 minStack 中。

3、压入3和0这两个数据,0成为了当前的最小值。

4、将当前最小值0压入到 minStack 中

5、继续压入9,当前的最小值还是0。

6、此时压入 -9 ,-9为此时最小值,将它压入minStack中

7、如果此时压入到stack中的值等于当前最小的值,也要压入到minStack中

总结:
如果要存放的值为x,minStack的栈顶元素为y。
stack = new Stack<>();minStack = new Stack<>();
stack.push(val);
if (minStack.empty()) {minStack.push(val);}
int stackTop = stack.peek();
if (val <= stackTop) {minStack.push(val);
}
if (!stack.empty()) {}
int stackX = stack.pop();
if (stackX == minStack.peek()) {minStack.pop();
}
if (!stack.empty()) {return stack.peek();
}
return -1;
return minStack.peek();
return -1;
public class MinStack {private Stack stack;private Stack minStack;public void minStack() {stack = new Stack<>();minStack = new Stack<>();}public void push(int val) {stack.push(val);//给stack压入一个值//最小栈为空if (minStack.empty()) {minStack.push(val);//压入到最小栈}else {//比较大小int stackTop = stack.peek();//看一下栈顶元素的值if (val <= stackTop) {//将这个栈顶元素压入到minStack中minStack.push(val);}}}public void pop() {if (!stack.empty()) {int stackX = stack.pop();//压入到stackX中//如果stack的栈顶的值等于最小栈的栈顶的值if (stackX == minStack.peek()) {//弹出minStack.pop();}}}public int top() {//不为空if (!stack.empty()) {//返回栈顶位置的下标return stack.peek();}return -1;}public int getMin() {if (minStack.empty()) {return -1;}//不为空返回栈顶的下标 - 栈顶会一直放最小值return minStack.peek();}
}
