7-1 最小栈设计并实现一个MinStack类
时间: 2024-09-12 20:09:57 浏览: 81
在设计一个最小栈(MinStack)类时,我们希望这个栈不仅能够支持基本的栈操作(如push、pop、top等),还能够返回当前栈中的最小元素。为了高效地实现这一功能,我们可以维护一个辅助栈,用于存储当前栈中的最小值。每次入栈时,我们比较当前值和辅助栈栈顶元素,将较小值入辅助栈;出栈时,我们同时将对应的最小值从辅助栈中弹出。
以下是MinStack类的一个简单实现:
```java
class MinStack {
private Stack<Integer> stack;
private Stack<Integer> minStack;
public MinStack() {
stack = new Stack<>();
minStack = new Stack<>();
}
public void push(int x) {
stack.push(x);
// 当辅助栈为空时,或当前值小于等于辅助栈栈顶元素时,将当前值入辅助栈
if (minStack.isEmpty() || x <= minStack.peek()) {
minStack.push(x);
}
}
public void pop() {
if (stack.isEmpty()) {
throw new RuntimeException("Stack is empty.");
}
int popValue = stack.pop();
// 当弹出的值是辅助栈栈顶元素时,同时弹出辅助栈的栈顶元素
if (popValue == minStack.peek()) {
minStack.pop();
}
}
public int top() {
if (stack.isEmpty()) {
throw new RuntimeException("Stack is empty.");
}
return stack.peek();
}
public int getMin() {
if (minStack.isEmpty()) {
throw new RuntimeException("MinStack is empty.");
}
return minStack.peek();
}
}
```
这个实现中,`stack`是主栈,用于存储所有入栈的元素;`minStack`是辅助栈,用于存储所有可能的最小元素。每个操作都保证了辅助栈能够正确反映出当前的最小值。
阅读全文