栈与队列简单1 种解法
#232用栈实现队列
只使用栈的标准操作,实现先进先出的队列接口。
#栈#队列#设计#摊还分析
解题主线
01
输入栈负责接收;输出栈为空时一次性倒入全部元素,最早元素随即位于输出栈顶。
解法 1:输入栈 + 输出栈
push 写入输入栈;pop/peek 通过按需搬运后的输出栈完成。
时间复杂度
push O(1),pop/peek 摊还 O(1),单次最坏 O(n)
空间复杂度
O(n)
java
import java.util.ArrayDeque;
import java.util.Deque;
final class MyQueue {
private final Deque<Integer> input = new ArrayDeque<>();
private final Deque<Integer> output = new ArrayDeque<>();
public void push(int x) {
input.push(x);
}
public int pop() {
moveIfNeeded();
return output.pop();
}
public int peek() {
moveIfNeeded();
return output.element();
}
public boolean empty() {
return input.isEmpty() && output.isEmpty();
}
private void moveIfNeeded() {
if (output.isEmpty()) {
while (!input.isEmpty()) output.push(input.pop());
}
}
}push 写入输入栈;pop/peek 通过按需搬运后的输出栈完成。
边界与易错点
- 输出栈非空时不能再次倒入,否则会破坏现有出队顺序。
- 每个元素最多进入、离开两个栈各一次,因此操作是摊还 O(1)。
整理来源
由旧仓库源码复核、去重并整理;展示代码已按 Java 21 语义修正明显问题。
easy/Q232_stackToQueue.java