刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!
解答思路:
要实现一个时间复杂度为O(1)的Java代码栈来执行Push、Pop以及Max操作,我们可以维护一个额外的变量来存储栈中的最大值。每次执行Push操作时,我们更新最大值;每次执行Pop操作时,我们检查是否需要更新最大值。这样,我们可以保证Max操作的时间复杂度为O(1)。
最优回答:
public class MaxStack {
private Stack<Integer> stack; // 用于存储元素的栈
private int maxStack; // 用于存储最大值的栈顶元素
public MaxStack() {
stack = new Stack<>();
maxStack = Integer.MIN_VALUE; // 初始化为极小值
}
// Push操作:将元素压入栈,并更新最大值
public void push(int val) {
stack.push(val);
if (val >= maxStack) {
maxStack = val; // 更新最大值
}
}
// Pop操作:弹出栈顶元素,并检查是否需要更新最大值
public int pop() {
if (stack.isEmpty()) {
throw new RuntimeException("Stack is empty!"); // 如果栈为空则抛出异常
}
int val = stack.pop(); // 弹出栈顶元素
if (val == maxStack) { // 如果弹出的元素是当前最大值,则需要更新最大值
maxStack = findMax(); // 使用findMax辅助方法来找到新的最大值(因为栈可能不为空)
}
return val; // 返回弹出的元素值
}
// 获取当前栈的最大值(时间复杂度为O(1))
public int max() {
return maxStack; // 直接返回当前最大值,无需遍历栈,时间复杂度为O(1)
}
// 辅助方法:查找当前栈的最大值(不使用此方法的常规调用)
private int findMax() {
int maxVal = Integer.MIN_VALUE; // 初始化为极小值
for (int val : stack) { // 遍历栈中的元素找到最大值
if (val > maxVal) {
maxVal = val; // 更新最大值
}
}
return maxVal; // 返回当前栈的最大值
}
}
本文链接:请描述您如何编写一个Java代码栈来实现Push、Pop操作以及获取当前栈中的最大值,同时确保这些操
版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!