题目连结:225. Implement Stack using Queues
题目主题:Stack, Design, Queue
了解完Stack跟Queue的概念後,最後再复习一题,上一题是用Stack实作Queue,这次题目是用Queue来实作Stack,这样应该足够对这两种资料结构有更深的了解。
这次不讲演算法资料结构,Stack跟Queue在前两篇都提过了,在这边多提一下关於LeetCode上面,平常如果有力气时可以多做的事情Follow-up。
有些题目会有这一个项目,是给解题者额外更难的挑战。以这题为例的话,原本题目解释的目标是说,请用两个Queue来实作Stack,但最後给你一个Follow-up问说,你可以用一个Queue来实作出Stack吗?
本文最後会分享的是两个Queue来实作的Stack,如果各位夥伴有空的话,可以再挑战看看这一题的Follow-up,这题的挑战其实并不难,建议可以玩玩看。
建议可以看看LeetCode原本的题目说明,这边是用我的方式说明题目,参考就好。
题目的目标是用两个Queue来实现Stack的功能,需实现的功能分别为:
约束:
范例1:
输入:
["MyStack", "push", "push", "top", "pop", "empty"]
[[], [1], [2], [], [], []]
输出:
[null, null, null, 2, 2, false]
解释:
输入的第一个阵列会是几个指令,第二个阵列是输入的参数。
输出就是使用指令後得到回应。
范例输入的指令过程会像是下方这一段。
MyStack myStack = new MyStack();
myStack.push(1); // stack is: [1]
myStack.push(2); // stack is: [1, 2]
myStack.top(); // return 2
myStack.pop(); // return 2
myStack.empty(); // return False
建议到这边先停下来,尝试自己解解看,若没有想法可再继续走下去。
__init__(self) 初始化时,宣告两个Queue
push(self, x: int) -> None
假设 push 了三次资料,分别是1, 2, 3。
top(self) -> int
继续上面的状态,queue = [1, 2, 3]
top,只需要显示不需要取出,因此直接拿最後一笔当回传值即可。
pop(self) -> int
继续上面的状态,queue = [1, 2, 3]
pop这边分为三步骤来完成,如下图。
empty(self) -> bool
继续上面的状态,因拿出一笔资料,现在queue = [1, 2]
因为tmp_queue永远保持空的,检查queue是否为空即可,此范例的结果会回False。
若因为没想法而走到这边,建议看完想像以後再给自己一次机会试一次。
from collections import deque
class MyStack:
# 初始化 需要两个Queue
def __init__(self):
self.queue = deque()
self.tmp_queue = deque()
# 直接用 queue 来新增资料
def push(self, x: int) -> None:
self.queue.append(x)
# tmp_queue 是暂存用的
# Queue是只能从最先进去的资料取得,因此把资料一个一个取出存到tmp_queue
# 直到剩一个资料才是stack的pop要取出来的资料,stack要取得是最後一个进去的资料
# 最後把tmp_queue的资料放回queue中,让tmp_queue永远保持空的
def pop(self) -> int:
while len(self.queue) >= 2:
self.tmp_queue.append(self.queue.popleft())
pop_value = self.queue.popleft()
self.queue = deque(self.tmp_queue)
self.tmp_queue.clear()
return pop_value
# 直接取得 queue 的最後一笔资料即可
def top(self) -> int:
return self.queue[-1]
# 直接检查 queue 是否为空即可,因为tmp_queue会确保保持空的
def empty(self) -> bool:
return not self.queue
若内容有什麽问题或建议欢迎一起交流:)
感谢您今天愿意花时间看完这篇文章~~~~
Next:506. Relative Ranks
<<: DAY 9 Big Data 5Vs – Velocity(多样性) RDS
>>: 不只懂 Vue 语法:如何用 event bus 或 mitt 实现跨元件传递资料?
今天我们要来实作一道题目,是不是很期待呢? Question:输入两个数字,印出两数字的和 看到「和...
权重的概念让我联想到拍卖会,HTML元素的样式就像是拍卖会上被竞标的商品,而选择器们就像是竞标的买...
甚麽是元件? 元件(Conponent)是Vue最主要的特性,提供HTML DOM的扩充性,将可以建...
FB登入 第一步:到FB官网并创建帐号 https://developers.facebook.co...
各位铁人\教师节快乐/ 昨天在显示图片的部份卡关,原本打算用contentResolver.inse...