[路飞]_leetcode-面试题03.04-化栈为队

简介: leetcode-面试题03.04-化栈为队

网络异常,图片无法展示
|


[题目地址][B站地址]


实现一个MyQueue类,该类用两个栈来实现一个队列。


示例:


MyQueue queue = new MyQueue();
queue.push(1);
queue.push(2);
queue.peek();  // 返回 1
queue.pop();   // 返回 1
queue.empty(); // 返回 false
复制代码


说明:


  • 你只能使用标准的栈操作 -- 也就是只有 push to top, peek/pop from top, sizeis empty 操作是合法的。
  • 你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。
  • 假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)。


本题很简单,就是让我们用两个栈模拟完成一个队列


队列的性质是 先进先出(FIFO)


栈的性质是 先进后出(FILO)


本题只需要维护两个栈,一个栈用来做入队栈,一个用来做出队栈


push 操作的时候,将元素压入入队栈,peekpop 操作的时候从出队栈获取元素

当出队栈没有元素的时候,从入队栈依次弹出每个元素压入出队栈,因为栈是先进后出的,此时入队栈的栈顶元素为最后入栈的,如此顺序压入出队栈后,出队栈栈顶即为最早入栈的元素


动画演示如下:2


网络异常,图片无法展示
|


代码如下:


var MyQueue = function() {
  // 入队栈
  this.stackin = []
  // 出队栈
  this.stackout = []
};
/**
 * Push element x to the back of queue. 
 * @param {number} x
 * @return {void}
 */
MyQueue.prototype.push = function(x) {
  this.stackin.push(x)
};
/**
 * Removes the element from in front of queue and returns that element.
 * @return {number}
 */
MyQueue.prototype.pop = function() {
  // 出队栈为空时,从入队栈导入所有元素
  if(!this.stackout.length)
    while(this.stackin.length){
      this.stackout.push(this.stackin.pop())
    }
  return this.stackout.pop();
};
/**
 * Get the front element.
 * @return {number}
 */
MyQueue.prototype.peek = function() {
  // 出队栈为空时,从入队栈导入所有元素
  if(!this.stackout.length)
    while(this.stackin.length){
      this.stackout.push(this.stackin.pop())
    }
  return this.stackout[this.stackout.length-1]
};
/**
 * Returns whether the queue is empty.
 * @return {boolean}
 */
MyQueue.prototype.empty = function() {
  return this.stackin.length===0&&this.stackout.length===0
};
复制代码


至此我们就完成了 leetcode-面试题03.04-化栈为队


如有任何问题或建议,欢迎留言讨论!

相关文章
|
4月前
|
存储 算法 Java
Java面试题:深入探究Java内存模型与垃圾回收机制,解释JVM中堆内存和栈内存的主要区别,谈谈对Java垃圾回收机制的理解,Java中的内存泄漏及其产生原因,如何检测和解决内存泄漏问题
Java面试题:深入探究Java内存模型与垃圾回收机制,解释JVM中堆内存和栈内存的主要区别,谈谈对Java垃圾回收机制的理解,Java中的内存泄漏及其产生原因,如何检测和解决内存泄漏问题
61 0
|
20天前
【LeetCode 24】225.用队列实现栈
【LeetCode 24】225.用队列实现栈
9 0
|
21天前
|
算法
【LeetCode 23】232.用栈实现队列
【LeetCode 23】232.用栈实现队列
15 0
|
3月前
|
存储 安全 Java
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程,JDK、JRE、JVM关系;程序计数器,堆,虚拟机栈,堆栈的区别是什么,方法区,直接内存
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别;什么是程序计数器,堆,虚拟机栈,栈内存溢出,堆栈的区别是什么,方法区,直接内存
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程,JDK、JRE、JVM关系;程序计数器,堆,虚拟机栈,堆栈的区别是什么,方法区,直接内存
|
3月前
|
存储 设计模式 Java
Unity精华☀️ 面试“堆、栈”误区!这样做可能反而会降低吸引力
Unity精华☀️ 面试“堆、栈”误区!这样做可能反而会降低吸引力
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 30. 包含min函数的栈
本文提供了实现一个包含min函数的栈的Python代码,确保min、push和pop操作的时间复杂度为O(1)。
24 4
|
3月前
|
Python
【Leetcode刷题Python】946. 验证栈序列
LeetCode题目“946. 验证栈序列”的Python解决方案,通过模拟栈的压入和弹出操作来验证给定的两个序列是否能通过合法的栈操作得到。
25 6
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 09. 用两个栈实现队列
使用两个栈实现队列的Python解决方案,包括初始化两个栈、实现在队列尾部添加整数的appendTail方法和在队列头部删除整数的deleteHead方法,以及相应的示例操作。
38 2
|
3月前
|
开发者 索引 Python
这些年背过的面试题——LeetCode
本文是技术人面试系列LeetCode篇,一文带你详细了解,欢迎收藏!
|
3月前
|
安全 Java
虚拟机栈的五道面试题
这篇文章提供了关于Java虚拟机栈的五个面试问题,涉及栈溢出的情况、栈大小调整、栈内存的分配、垃圾回收与虚拟机栈的关系以及局部变量的线程安全性。