最小栈
添加一个辅助栈作为最小栈用来存储每个时间段的最小元素,保证最小栈的栈顶元素永远是对应时间段的最小元素
class MinStack {
// data 栈用于存储所有元素
Stack<Integer> data;
// min 栈用于存储当前最小元素
Stack<Integer> min;
// 构造函数,初始化两个栈
public MinStack() {
data = new Stack<Integer>(); // 初始化 data 栈
min = new Stack<Integer>(); // 初始化 min 栈
}
// push 操作,将元素 val 添加到栈顶
public void push(int val) {
data.push(val); // 将 val 压入 data 栈
// 如果 min 栈为空,或者 val 小于等于 min 栈顶元素,则将 val 压入 min 栈
if (min.isEmpty() || val <= min.peek()) {
min.push(val);
}
}
// pop 操作,移除并返回栈顶元素
public void pop() {
// 如果 data 栈顶元素等于 min 栈顶元素,则从两个栈中都弹出栈顶元素
if (data.peek().equals(min.peek())) {
min.pop();
}
// 从 data 栈中弹出栈顶元素
data.pop();
}
// top 操作,返回 data 栈顶元素,不移除它
public int top() {
return data.peek(); // 返回 data 栈顶元素
}
// getMin 操作,返回 min 栈顶元素,即当前栈中的最小元素
public int getMin() {
return min.peek(); // 返回 min 栈顶元素
}
}