LeetCode第232题Implement Queen using Stacks
Implement Queen using Stacks
Implement Queen using Stacks用栈实现一个队列。
Example:
MyQueue queue = new MyQueue();
queue.push(1);
queue.push(2);
queue.peek(); // returns 1
queue.pop(); // returns 1
queue.empty(); // returns false
队列的特性是先进先出,栈的特性是先进后出,我们要实现队列的三个操作,分别是push
、pop
、peek
,还有一个队列状态检查empty
。可以使用两个栈来实现,分别是input
、output
,两者的分工非常清楚:
- 所有的
push
操作,进队列的元素通通丢到input
栈中。 - 所有的
pop
、peek
操作,出队列的元素通通在output
栈中输出。 - 状态检查时,只需要检查两个栈是否都为空,如果是,则队列为空。
需要注意的地方是,两个栈之间如何互相“倒腾”元素。例如我们push
了4次得到一个队列[1,2,3,4]
,然后pop
一次弹出元素[1]
,队列中剩下[2,3,4]
,我们再往里push
元素[5]
,得到队列[2,3,4,5]
。那么这个过程中,input
栈与output
栈之间需要“倒腾”一下,4次push
很简单,元素通通压入了input
栈,此时output
栈为空。
input | # | output |
---|---|---|
4 | # | null |
3 | # | null |
2 | # | null |
1 | # | null |
当我们执行pop
时,需要把input
栈中的元素“倒腾”到output
栈中,再从output
栈中pop
出栈顶元素,此时input
栈为空。
input | # | output |
---|---|---|
null | # | 1 |
null | # | 2 |
null | # | 3 |
null | # | 4 |
再往队列中push
元素[5]
时,需要把output
栈中的元素“倒腾”到input
栈中,再将新元素[5]
给push
到栈顶,此时output
栈为空。
input | # | output |
---|---|---|
5 | # | null |
4 | # | null |
3 | # | null |
2 | # | null |
Solution
下面是Java
的代码:
class MyQueue { |
下面是Python
的代码:
class MyQueue: |
总结
第232题是简单题,两个数据结构的特性也非常清楚,关键在于理清先进先出与先进后出两个特性之间的关联。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WenQian Dong's Web!