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<Integer> stack;
private Stack<Integer> 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();
}
}
