232. 用栈实现队列 - 力扣(LeetCode)
1. 文章链接
2. 看到题目的第一想法
两个栈确实可以做队列, 入队相当于进入栈A,
出队时,检查是否有元素,如果有元素,则必然在A中,将A的所有元素pop()到放入到B中,然后再B.pop()一次。
B.pop()结束后,再将B的其余元素全部pop()回A。
3. 看完代码随想录之后的想法
不需要在B.pop()结束后再全部pop()回A。
而是如果有元素,先看B中是否有元素,没有就将A全部pop到B中再B.pop(),但是如果有先B.pop()。
class MyQueue:
def __init__(self):
self.in_stack = list()
self.out_stack = list()
def push(self, x: int) -> None:
self.in_stack.append(x)
def pop(self) -> int:
if self.empty():
return None
else:
if len(self.out_stack) == 0:
while len(self.in_stack) > 0:
self.out_stack.append(self.in_stack.pop())
return self.out_stack.pop()
def peek(self) -> int:
if self.empty():
return None
else:
if len(self.out_stack) == 0:
while len(self.in_stack) > 0:
self.out_stack.append(self.in_stack.pop())
return self.out_stack[-1]
def empty(self) -> bool:
if len(self.in_stack) == 0 and len(self.out_stack) == 0:
return True
else:
return False
# 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()
4. 实现过程中遇到的困难
无
5.学习时长
30分钟
225. 用队列实现栈 - 力扣(LeetCode)
1. 文章链接
2. 看到题目的第一想法
两个队列deque,一个输入输出队列,一个中间暂存队列。
当入栈的时候,向输入队列append就行,
当出栈时,将所有输入输出队列元素从队首出来存到中间暂存队列里,直到输入输出队列就剩一个元素。
这个元素就能是栈顶元素,直接popleft就可以.
然后输入输出队列就是现在的中间暂存队列,中间暂存队列就是现在已经空了的输入输出队列。
class MyStack:
def __init__(self):
self.io_queue = deque()
self.cache_queue = deque()
def push(self, x: int) -> None:
self.io_queue.append(x)
def pop(self) -> int:
if self.empty():
return None
while len(self.io_queue) > 1:
self.cache_queue.append(self.io_queue.popleft())
top_ele = self.io_queue.popleft()
self.io_queue, self.cache_queue = self.cache_queue, self.io_queue
return top_ele
def top(self) -> int:
if self.empty():
return None
while len(self.io_queue) > 1:
self.cache_queue.append(self.io_queue.popleft())
top_ele = self.io_queue.popleft()
self.io_queue, self.cache_queue = self.cache_queue, self.io_queue
self.io_queue.append(top_ele)
return top_ele
def empty(self) -> bool:
if self.io_queue:
return False
else:
return True
# 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()
3. 看完代码随想录之后的想法
和我的想法差不多。
4. 实现过程中遇到的困难
无。
5.学习时长
24分钟。