[LeetCode]day29 232.用栈实现队列

devtools/2025/2/27 23:36:14/

题目链接

题目描述

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):

实现 MyQueue 类:

void push(int x) 将元素 x 推到队列的末尾
int pop() 从队列的开头移除并返回元素
int peek() 返回队列开头的元素
boolean empty() 如果队列为空,返回 true ;否则,返回 false
说明:

你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。
你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。

示例 1:

输入:
[“MyQueue”, “push”, “push”, “peek”, “pop”, “empty”]
[[], [1], [2], [], [], []]
输出:
[null, null, null, 1, 1, false]

解释:
MyQueue myQueue = new MyQueue();
myQueue.push(1); // queue is: [1]
myQueue.push(2); // queue is: [1, 2] (leftmost is front of the queue)
myQueue.peek(); // return 1
myQueue.pop(); // return 1, queue is [2]
myQueue.empty(); // return false

提示:

1 <= x <= 9
最多调用 100 次 push、pop、peek 和 empty
假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)

解题

解法一:

请添加图片描述
思路

我定义了两个栈:

  • in栈:用于存储新加入的元素。
  • out栈:用于存储即将被弹出的元素。
    引入了两个计数器:
  • numOfIn:记录 in 栈中的元素数量。
  • numOfOut:记录 out 栈中的元素数量。

进行pop操作时,先将除栈底元素的其他元素全部压入另外一个栈中,弹出栈底元素之后再压回

class MyQueue {
public:stack<int>in;int numOfIn;stack<int>out;int numOfOut;MyQueue() {numOfIn=0;numOfOut=0;}void push(int x) {in.push(x);numOfIn++;}int pop() {while(numOfIn>1){int num=in.top();in.pop();numOfIn--;out.push(num);numOfOut++;}int re=in.top();in.pop();numOfIn--;while(numOfOut>0){int num=out.top();in.push(num);out.pop();numOfOut--;numOfIn++;}return re;}int peek() {while(numOfIn>1){int num=in.top();in.pop();numOfIn--;out.push(num);numOfOut++;}int re =  in.top();while(numOfOut>0){int num=out.top();in.push(num);out.pop();numOfOut--;numOfIn++;}return re;}bool empty() {return  in.empty();}
};

这种解法的缺点也非常明显 每次pop()peek()都会牵扯到大量数据移动 效率很低

解法二

思路:
入栈就直接进入in栈,出栈时如果out栈不为空,out栈执行pop操作,反之,In栈元素全部压入out栈中再pop
这样所有元素就不用来回倒腾啦
请添加图片描述

class MyQueue {
public:stack<int>in;stack<int>out;MyQueue() {}void push(int x) {in.push(x);}int pop() {if(out.empty()){while(!in.empty()){int num;num=in.top();in.pop();out.push(num);}}int topNum=out.top();out.pop();return topNum;}int peek() {if(out.empty()){while (!in.empty()) {int num = in.top();in.pop();out.push(num);
}}return out.top();}bool empty(){return  in.empty()&&out.empty();}};/*** Your MyQueue object will be instantiated and called as such:* MyQueue* obj = new MyQueue();* obj->push(x);* int param_2 = obj->pop();* int param_3 = obj->peek();* bool param_4 = obj->empty();*/

http://www.ppmy.cn/devtools/163197.html

相关文章

C# 根据Ollama+DeepSeekR1开发本地AI辅助办公助手

在上一篇《访问DeepSeekR1本地部署API服务搭建自己的AI办公助手》中&#xff0c;我们通过通过Ollama提供的本地API接口用Python实现了一个简易的AI办公助手&#xff0c;但是需要运行Py脚本&#xff0c;还比较麻烦&#xff0c;下面我们用C#依据Ollama提供的API接口开发一个本地A…

nv docker image 下载与使用命令备忘

1&#xff0c;系统需求 Requirements for GPU Simulation GPU Architectures Volta, Turing, Ampere, Ada, Hopper NVIDIA GPU with Compute Capability 7.0 CUDA 11.x (Driver 470.57.02), 12.x (Driver 525.60.13) Supported Systems CPU architectures x86_64, ARM…

基于PHP+MySQL实现的毕业设计选题管理系统

基于PHP实现的毕业设计选题管理系统 1.项目简介 1.1客户端功能&#xff1a; 用户功能&#xff1a;登录、修改密码查看课题列表&#xff08;检索方式&#xff1a;全部课题、按指导老师、按课题类型&#xff09;选择一个课题并提交选题申请&#xff08;每个课题只能被一人选择…

Android 15 加入显示网速

1、frameworks\base\core\java\android\provider\Settings.java 加入新的api public static final class Global extends NameValueTable {/// AW CODE: [feat] support systemui show network speed./*** switch of network speed.* hide*/public static final String NETWOR…

ubuntu20.04 使用nmcli 连接wifi,并且设置永久连接

在 Ubuntu 20.04 中&#xff0c;你可以使用 nmcli 命令行工具来连接 WiFi 并设置为永久连接。以下是具体步骤&#xff1a; 1. 查看可用的 WiFi 网络 首先&#xff0c;使用以下命令查看可用的 WiFi 网络&#xff1a; nmcli dev wifi 这将列出所有可用的 WiFi 网络及其 SSID。…

WPF框架学习

WPF 可以想winfrom 那样在cs文件修改 属性数据&#xff1b; 为了前后端分离 而解耦合&#xff0c;有了M-V-VM模式 常见框架有 MVVMlight / Prism 等 ------------------------------------------------------------------------------------- 一、前提&#xff1a;有一定基…

QT MD5校验文件和数据的完整性

MD5介绍&#xff1a; ‌MD5&#xff0c;全称为‌‌Message-Digest Algorithm 5&#xff08;消息摘要算法5&#xff09;‌&#xff0c;是一种广泛使用的密码散列函数。它可以将任意长度的“字节串”变换成一个128位&#xff08;16字节&#xff09;的散列值&#xff08;hash valu…

Maven最新版安装教程

一、Maven下载 1.前往官网下载 点击前往官网 2.进去之后点击Download 如果是Windows用户使用Maven则选择apache-maven-x.x.x-bin.zip即可。Liunx和MacOS用户则选择apache-maven-x.x.x-bin.tar.zip。 由于服务器在国外下载可能会很慢或者失败&#xff0c;大家可以去网盘获取 …