[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