[LeetCode] 232. Implement Queue using Stacks

Posted aaronliu1991

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LeetCode] 232. Implement Queue using Stacks相关的知识,希望对你有一定的参考价值。

用栈模拟队列。同理参考镜子题225题

题干即是题意,用栈实现队列的几个函数,例子,

Example:

MyQueue queue = new MyQueue();

queue.push(1);
queue.push(2);  
queue.peek();  // returns 1
queue.pop();   // returns 1
queue.empty(); // returns false

思路是需要用到两个栈,用first和second表示。以下分别解释一下每个函数的实现方式。

push() - 将元素加入队列。这没什么可说的,加入到第一个栈first中。

pop() - 弹出队列的首个元素。因为stack只会弹出最后一个放入的元素,所以只能通过将第一个stack中的元素全部倒入第二个stack中,再pop的方式,得到queue的首个元素。

peek() - 看一下队列顶端的元素。因为peek的功能几乎跟pop无异,只是pop会弹出首个元素,peek只是看一下,所以做法跟pop几乎相同,也是需要将所有元素都倒入第二个stack中再peek第二个stack的顶端。

empty() - 检测队列是否为空。只要看一下两个stack是否都为空即可。

最后分享一个B站非常好的视频讲解,https://www.bilibili.com/video/av86054613/

时间O(n)

空间O(n) - 用到两个stack

 1 /**
 2  * Initialize your data structure here.
 3  */
 4 var MyQueue = function () {
 5     this.first = [];
 6     this.second = [];
 7 };
 8 
 9 /**
10  * Push element x to the back of queue. 
11  * @param {number} x
12  * @return {void}
13  */
14 MyQueue.prototype.push = function (x) {
15     this.first.push(x);
16 };
17 
18 /**
19  * Removes the element from in front of queue and returns that element.
20  * @return {number}
21  */
22 MyQueue.prototype.pop = function () {
23     // if the second stack is empty, move everything from first to second
24     if (!this.second.length) {
25         while (this.first.length) {
26             this.second.push(this.first.pop());
27         }
28     }
29     return this.second.pop();
30 };
31 
32 /**
33  * Get the front element.
34  * @return {number}
35  */
36 MyQueue.prototype.peek = function () {
37     // almost same as pop()
38     if (!this.second.length) {
39         while (this.first.length) {
40             this.second.push(this.first.pop());
41         }
42     }
43     return this.second[this.second.length - 1];
44 };
45 
46 /**
47  * Returns whether the queue is empty.
48  * @return {boolean}
49  */
50 MyQueue.prototype.empty = function () {
51     return !this.first.length && !this.second.length;
52 };
53 
54 /**
55  * Your MyQueue object will be instantiated and called as such:
56  * var obj = new MyQueue()
57  * obj.push(x)
58  * var param_2 = obj.pop()
59  * var param_3 = obj.peek()
60  * var param_4 = obj.empty()
61  */

 

以上是关于[LeetCode] 232. Implement Queue using Stacks的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 232: Implement Queue using Stacks

[Leetcode] 232. Implement Queue using Stacks

leetcode 232. Implement Queue using Stacks

LeetCode 232 Implement Queue using Stacks

LeetCode OJ 232Implement Queue using Stacks

LeetCode 232. Implement Queue using Stacks