

可以使用两个栈(stack1 和 stack2)来实现一个队列。
主要思路:
push(x): 直接将元素压入stack1。pop(): 如果stack2为空,则将stack1中的所有元素倒入stack2,然后弹出stack2顶部元素。peek(): 类似pop(),只是返回stack2顶部元素而不弹出。empty(): 当stack1和stack2都为空时,队列为空。
下面是 Python 代码实现:
class MyQueue:
def __init__(self):
self.stack1 = [] # 用于压入新元素
self.stack2 = [] # 用于倒序存储,实现 FIFO
def push(self, x: int) -> None:
self.stack1.append(x)
def pop(self) -> int:
if not self.stack2:
while self.stack1:
self.stack2.append(self.stack1.pop())
return self.stack2.pop()
def peek(self) -> int:
if not self.stack2:
while self.stack1:
self.stack2.append(self.stack1.pop())
return self.stack2[-1]
def empty(self) -> bool:
return not self.stack1 and not self.stack2
时间复杂度分析
push(x): O(1),直接压入stack1。pop(): 摊还 O(1),每个元素最多被stack1和stack2处理两次(一次入栈、一次出栈)。peek(): 摊还 O(1),与pop()类似,最坏情况是 O(n),但均摊下来是 O(1)。empty(): O(1),直接检查两个栈是否为空。
这个方法保证了队列的 FIFO(先进先出) 特性,并且操作效率很高!
602

被折叠的 条评论
为什么被折叠?



