作者:兴桂秀寧29 | 来源:互联网 | 2024-12-12 09:45
问题描述
设计一个支持标准栈操作(如push、pop和top)的栈类,同时需要实现一个min方法,该方法能在常数时间内返回当前栈中的最小元素。
解决方案
为了实现在常数时间内获取栈中的最小值,我们可以使用两个栈来存储数据:一个用于存储所有入栈的元素,另一个用于维护一个递减的最小值序列。当新元素入栈时,如果它小于或等于辅助栈的栈顶元素,则将它也压入辅助栈;否则,将辅助栈的栈顶元素再次压入辅助栈,以保持辅助栈的递减特性。这样,在执行出栈操作时,主栈和辅助栈同时弹出元素,确保了辅助栈的栈顶始终为主栈中的最小值。
import java.util.Stack;
public class MinStack {
private Stack dataStack = new Stack<>();
private Stack minStack = new Stack<>();
public void push(int value) {
dataStack.push(value);
if (minStack.isEmpty() || value <= minStack.peek()) {
minStack.push(value);
} else {
minStack.push(minStack.peek());
}
}
public void pop() {
if (!dataStack.isEmpty()) {
dataStack.pop();
minStack.pop();
}
}
public int top() {
return dataStack.peek();
}
public int getMin() {
return minStack.peek();
}
}