0X00 模板题目
使用栈翻转的性质
, 把栈翻转两次可以做到 FIFO, 在代码中使用了两个栈, 一个用来 Push, 一个用来 Pop
class MyQueue:
def __init__(self):
self.popStack = []
self.pushStack = []
def push(self, x: int) -> None:
self.pushStack.append(x)
def pop(self) -> int:
# 要等 popStack 空了才能转移
if self.popStack:
return self.popStack.pop()
while self.pushStack:
self.popStack.append(self.pushStack.pop())
return self.popStack.pop()
def peek(self) -> int:
if self.popStack:
return self.popStack[-1]
while self.pushStack:
self.popStack.append(self.pushStack.pop())
return self.popStack[-1]
def empty(self) -> bool:
return not self.popStack and not self.pushStack
这个稍微难一点, 本质就是 popleft 整个队列, 把第一个元素拿出来, 然后把剩下的元素放入另外一个「辅助队列」里面
再交换两个队列
from collections import deque
class MyStack:
def __init__(self):
self.pushQue = deque()
self.helperQue = deque()
def push(self, x: int) -> None:
self.pushQue.appendleft(x)
def pop(self) -> int:
while len(self.pushQue) > 1:
self.helperQue.appendleft(self.pushQue.pop())
ans = self.pushQue.pop()
self.pushQue, self.helperQue = self.helperQue, self.pushQue
return ans
def top(self) -> int:
return self.pushQue[0]
def empty(self) -> bool:
return not self.pushQue
0X01 注意事项
暂无
网友评论