【数据结构与算法】力扣 225. 用队列实现栈

news/2024/10/22 3:38:31/

题目描述

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(pushtoppop 和 empty)。

实现 MyStack 类:

  • void push(int x) 将元素 x 压入栈顶。
  • int pop() 移除并返回栈顶元素。
  • int top() 返回栈顶元素。
  • boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。

注意:

  • 你只能使用队列的标准操作 —— 也就是 push to backpeek/pop from frontsize 和 is empty 这些操作。
  • 你所使用的语言也许不支持队列。 你可以使用 list (列表)或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。

示例:

输入:
["MyStack", "push", "push", "top", "pop", "empty"]
[[], [1], [2], [], [], []]
输出:
[null, null, null, 2, 2, false]解释:
MyStack myStack = new MyStack();
myStack.push(1);
myStack.push(2);
myStack.top(); // 返回 2
myStack.pop(); // 返回 2
myStack.empty(); // 返回 False

提示:

  • 1 <= x <= 9
  • 最多调用100 次 pushpoptop 和 empty
  • 每次调用 pop 和 top 都保证栈不为空

进阶: 你能否仅用一个队列来实现栈。

分析解答

需要实现:

image.png

正常队列(先进先出):

  1. push
  2. peek / pop
  3. size
  4. is empty

image.png

var MyStack = function() {this.arr1 = [];this.arr2 = [];
};MyStack.prototype.push = function(x) {this.arr2.push(x);
};MyStack.prototype.pop = function() {if (this.arr2.length !== 0) {while (this.arr2.length > 1) {this.arr1.push(this.arr2.shift());}return this.arr2.shift();}while (this.arr1.length > 1) {this.arr2.push(this.arr1.shift());}return this.arr1.shift();
};MyStack.prototype.top = function() {let topElement;if (this.arr2.length !== 0) {while (this.arr2.length > 1) {this.arr1.push(this.arr2.shift());}topElement = this.arr2[0];this.arr1.push(this.arr2.shift());} else {while (this.arr1.length > 1) {this.arr2.push(this.arr1.shift());}topElement = this.arr1[0];this.arr2.push(this.arr1.shift());}return topElement;
};MyStack.prototype.empty = function() {return this.arr2.length === 0 && this.arr1.length === 0;
};/*** Your MyStack object will be instantiated and called as such:* var obj = new MyStack()* obj.push(x)* var param_2 = obj.pop()* var param_3 = obj.top()* var param_4 = obj.empty()*/

和之前做的用栈实现队列,基本思路差不多。都是根据不同数据结构的特性控制元素的移动。

思路拓展


http://www.ppmy.cn/news/1442448.html

相关文章

一份报告实现两电平逆变、三电平逆变、三相整流、光伏并网simulink仿真

一份报告实现两电平逆变、三电平逆变、三相整流、光伏并网simulink仿真。逆变、整流与光伏的全家桶系列&#xff0c;适合小白使用。 模型获取链接&#xff1a;一份报告实现两电平逆变、三电平逆变、三相整流、光伏并网simulink仿真

自动打卡,签到

&#x1f31f; QD神器简介 QD&#xff0c;它是一个基于Har的TTP请求定时任务自动执行框架。简单来说&#xff0c;就是一款能够帮你自动完成各种签到任务的神器。它不仅基于Har&#xff0c;还使用了Tornado服务端&#xff0c;支持API和插件&#xff0c;并且是开源的&#xff0c…

对浅拷贝的理解

问题背景 我之前一直以为浅拷贝出来的新对象和旧对象的引用地址是相同的&#xff0c;但是通过Object和发现浅拷贝的新对象和旧对象的引用地址不同&#xff01;&#xff01; const obj1 { name: "Alice", test: { age: 12 } };const obj4 Object.assign({}, obj1);…

时间序列生成数据,TransformerGAN

简介&#xff1a;这个代码可以用于时间序列修复和生成。使用transformer提取单变量或者多变时间窗口的趋势分布情况。然后使用GAN生成分布类似的时间序列。 此外&#xff0c;还实现了基于prompt的数据生成&#xff0c;比如指定生成某个月份的数据、某半个月的数据、某一个星期的…

【GitHub】主页简历优化

【github主页】优化简历 写在最前面一、新建秘密仓库二、插件卡片配置1、仓库状态统计2、Most used languages&#xff08;GitHub 常用语言统计&#xff09;使用细则 3、Visitor Badge&#xff08;GitHub 访客徽章&#xff09;4、社交统计5、打字特效6、省略展示小猫 &#x1f…

HTTP如何自动跳转到HTTPS,免费SSL证书如何获取

如今HTTPS已经成为了网站标配&#xff0c;然而&#xff0c;对于一些刚刚起步的网站或是个人博客而言&#xff0c;如何自动跳转到HTTPS&#xff0c;以及免费SSL证书的获取&#xff0c;可能还是一个需要解决的问题。下面就来详细解答这两个问题。 我们需要先了解HTTP与HTTPS的区…

FreeBSD系统安装Tlsla P4专业AI计算卡(待续)

首先打开FreeBSD下的linux兼容服务 sysrc linux_enable"YES" service linux start 安装nvidia英伟达驱动 # 由shkhln提供&#xff0c;官网&#xff1a;https://github.com/shkhln/libc6-shim pkg install libc6-shim# nvidia驱动占用空间较大&#xff0c;需要2G空…

Win linux 下配置adb fastboot

一、Win配置adb & fastboot 环境变量 主机&#xff1a;Win10&#xff0c;除了adb fastboot需要设置变量之外&#xff0c;驱动直接安装即可 win下adb fastboot 下载地址&#xff1a;https://download.csdn.net/download/u012627628/89215420 win下qcom设备驱动下载地址&a…