[路飞]_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-化栈为队


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

相关文章
|
2天前
|
存储 算法 索引
力扣每日一题 6/24 模拟 数组 单调栈
力扣每日一题 6/24 模拟 数组 单调栈
6 0
|
16天前
|
存储 算法 Python
二刷力扣--栈和队列
二刷力扣--栈和队列
|
20天前
|
存储 算法 数据挖掘
深入解析力扣168题:Excel表列名称(进制转换法详解及模拟面试问答)
深入解析力扣168题:Excel表列名称(进制转换法详解及模拟面试问答)
|
20天前
|
存储 算法 数据挖掘
深入解析力扣166题:分数到小数(模拟长除法与字符串操作详解及模拟面试问答)
深入解析力扣166题:分数到小数(模拟长除法与字符串操作详解及模拟面试问答)
|
20天前
|
存储 算法 数据可视化
【模拟面试问答】深入解析力扣163题:缺失的区间(线性扫描与双指针法详解)
【模拟面试问答】深入解析力扣163题:缺失的区间(线性扫描与双指针法详解)
|
20天前
|
存储 算法 数据可视化
【模拟面试问答】深入解析力扣164题:最大间距(桶排序与排序方法详解)
【模拟面试问答】深入解析力扣164题:最大间距(桶排序与排序方法详解)
|
20天前
|
SQL 算法 大数据
深入解析力扣176题:第二高的薪水(子查询与LIMIT详解及模拟面试问答)
深入解析力扣176题:第二高的薪水(子查询与LIMIT详解及模拟面试问答)
|
20天前
|
算法 数据挖掘 大数据
深入解析力扣172题:阶乘后的零(计算因子5的方法详解及模拟面试问答)
深入解析力扣172题:阶乘后的零(计算因子5的方法详解及模拟面试问答)
|
20天前
|
算法 数据挖掘 大数据
深入解析力扣171题:Excel表列序号(进制转换法详解及模拟面试问答)
深入解析力扣171题:Excel表列序号(进制转换法详解及模拟面试问答)
|
20天前
|
算法 数据挖掘 Java
深入解析力扣167题:两数之和 II(双指针法详解及模拟面试问答)
深入解析力扣167题:两数之和 II(双指针法详解及模拟面试问答)