代码随想录算法训练营|232.用栈实现队列;225. 用队列实现栈
232.用栈实现队列
题目链接: 232.用栈实现队列
文档讲解: 代码随想录
题目难度:简单
思路:两个栈实现队列
时间复杂度:O(n);空间复杂度:O(n)
下面展示 代码
:
class MyQueue:
# 使用list底层实现
def __init__(self):
self.input = []
self.output = []
def push(self, x: int) -> None:
self.input.append(x)
def pop(self) -> int:
if self.empty():
return None
else:
if self.output:
return self.output.pop()
else:
for i in range(len(self.input)):
self.output.append(self.input.pop())
return self.output.pop()
def peek(self) -> int:
ans = self.pop()
self.output.append(ans)
return ans
def empty(self) -> bool:
if self.input or self.output:
return False
else:
return True
# Your MyQueue object will be instantiated and called as such:
# obj = MyQueue()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.peek()
# param_4 = obj.empty()
225. 用队列实现栈
题目链接: 225. 用队列实现栈
文档讲解: 代码随想录
题目难度:简单
思路:两个队列,一个队列用于临时存储
代码
如下
from collections import deque
class MyStack:
# 两个队列实现
# 队列语法:
# 加入:que.append(x)
# 获取即将出队的元素:que[0]
# 获取队尾的元素:que[-1]
# 队列长度 len(que)
# 删除即将出队的元素:que.popleft() 先进来的在左边
def __init__(self):
self.din = deque()
self.dout = deque()
def push(self, x: int) -> None:
self.din.append(x)
def pop(self) -> int:
if self.empty():
return None
else:
for i in range(len(self.din) - 1):
# 除最后一个元素外的所有元素
self.dout.append(self.din.popleft())
ans = self.din.popleft()
self.din, self.dout = self.dout, self.din # 交换din和dout
return ans
def top(self) -> int:
if self.empty():
return None
else:
return self.din[-1]
def empty(self) -> bool:
if len(self.din) == 0:
return True
else:
return False
# Your MyStack object will be instantiated and called as such:
# obj = MyStack()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.top()
# param_4 = obj.empty()