每日一题——用两个栈实现队列

用两个栈实现队列

    • 题目描述
      • 数据范围
      • 示例
    • 代码实现
      • 1. 代码思路
        • `push` 操作:
        • `pop` 操作:
      • 2. 代码实现
      • 3. 代码解析
      • 4. 时间复杂度与空间复杂度
    • 总结

题目描述

用两个栈来实现一个队列,使用 n 个元素来完成 n 次在队列尾部插入整数(push)和 n 次在队列头部删除整数(pop)的功能。队列中的元素为 int 类型。保证操作合法,即保证 pop 操作时队列内已有元素。

数据范围

  • 操作次数 n n n 满足 0 ≤ n ≤ 1000 0 \leq n \leq 1000 0n1000
  • 队列中的元素范围为 ∣ v a l ∣ ≤ 10000 |val| \leq 10000 val10000
  • 要求:存储 n 个元素的空间复杂度为 O ( n ) O(n) O(n),插入与删除的时间复杂度为 O ( 1 ) O(1) O(1)

示例

输入1:

["PSH1", "PSH2", "POP", "POP"]

输出1:

1, 2

解析:

  • "PSH1":将 1 插入队列尾部
  • "PSH2":将 2 插入队列尾部
  • "POP":删除一个元素,先进先出 => 返回 1
  • "POP":删除一个元素,先进先出 => 返回 2

输入2:

["PSH2", "POP", "PSH1", "POP"]

输出2:

2, 1

代码实现

1. 代码思路

  • 使用两个栈 stack1stack2 来模拟队列。
  • stack1 用于存储入队操作的元素。
  • stack2 用于存储出队操作时,从 stack1 中转移过来的元素。
push 操作:
  • 直接将元素压入 stack1
pop 操作:
  • 如果 stack2 为空,则将 stack1 中的所有元素转移到 stack2 中,这样 stack2 的栈顶就是最早进入队列的元素。
  • 如果 stack2 不为空,直接从 stack2 弹出栈顶元素。

2. 代码实现

#define MAX_SIZE 1000  // 假设栈最大容量
int stack1[MAX_SIZE];
int stack2[MAX_SIZE];int top1 = 0; // 插入栈栈顶指针
int top2 = 0; // 删除栈栈顶指针// 入队操作
void push(int node) {if (top1 < MAX_SIZE) {stack1[top1++] = node;  // 将元素压入 stack1}
}// 出队操作
int pop() {// 如果 stack2 为空,将 stack1 中的元素倒入 stack2if (top2 == 0) {while (top1 > 0) {stack2[top2++] = stack1[--top1];  // 将 stack1 中的元素倒入 stack2}}// 如果 stack2 不为空,正常弹出栈顶元素if (top2 > 0) {return stack2[--top2];  // 弹出 stack2 的栈顶元素}return -1;  // 当栈为空时返回 -1
}

3. 代码解析

  1. push 函数

    • 该函数将一个整数 node 压入 stack1,作为队列的尾部元素。
  2. pop 函数

    • 如果 stack2 为空,说明当前队列中没有待出队的元素,我们需要将 stack1 中的元素逐一移入 stack2,以确保 stack2 的栈顶为最早入队的元素。
    • 如果 stack2 不为空,则直接从 stack2 中弹出栈顶元素,这样确保了队列的先进先出特性。

4. 时间复杂度与空间复杂度

  • 时间复杂度

    • push 操作时间复杂度为 O ( 1 ) O(1) O(1),因为我们只是将元素压入 stack1
    • pop 操作的最坏时间复杂度为 O ( n ) O(n) O(n),当 stack2 为空时,需要将 stack1 中的所有元素转移到 stack2,不过每个元素最多被移动一次,因此在所有操作完成后的平均时间复杂度是 O ( 1 ) O(1) O(1)
  • 空间复杂度

    • 由于我们使用了两个栈,因此空间复杂度是 O ( n ) O(n) O(n),其中 n 是队列中元素的个数。

总结

整体上这题还是比较简单的,没什么难度,只要懂了思路还是很好实现的,最开始花了很多时间去实现栈,结果发现,卧槽怎么没有栈,没有主函数,原来只需要模拟栈即可。反正只要记住一个用来进入,一个用来出去,只要第二个栈空了,就把第一个倒进去。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/68850.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Chapter2 Amplifiers, Source followers Cascodes

Chapter2 Amplifiers, Source followers & Cascodes MOS单管根据输入输出, 可分为CS放大器, source follower和cascode 三种结构. Single-transistor amplifiers 这一章学习模拟电路基本单元-单管放大器 单管运放由Common-Source加上DC电流源组成. Avgm*Rds, gm和rds和…

Linux系统上安装与配置 MySQL( CentOS 7 )

目录 1. 下载并安装 MySQL 官方 Yum Repository 2. 启动 MySQL 并查看运行状态 3. 找到 root 用户的初始密码 4. 修改 root 用户密码 5. 设置允许远程登录 6. 在云服务器配置 MySQL 端口 7. 关闭防火墙 8. 解决密码错误的问题 前言 在 Linux 服务器上安装并配置 MySQL …

14-9-2C++STL的set容器

&#xff08;一&#xff09;函数对象的基本概念 set容器的元素排序 1.set<int,less<int> >setlntA;//该容器是按升序方式排列元素&#xff0c;set<int>相当于set<int,less<int>> 2.set<int,greater<int> >setlntB;//该容器是按降序…

音视频入门基础:RTP专题(8)——使用Wireshark分析RTP

一、引言 通过Wireshark可以抓取RTP数据包&#xff0c;该软件可以从Wireshark Go Deep 下载。 二、通过Wireshark抓取RTP数据包 首先通过FFmpeg将一个媒体文件转推RTP&#xff0c;生成RTP流&#xff1a; ffmpeg -re -stream_loop -1 -i input.mp4 -vcodec copy -an -f rtp …

解决whisper 本地运行时GPU 利用率不高的问题

我在windows 环境下本地运行whisper 模型&#xff0c;使用的是nivdia RTX4070 显卡&#xff0c;结果发现GPU 的利用率只有2% 。使用 import torch print(torch.cuda.is_available()) 返回TRUE。表示我的cuda 是可用的。 最后在github 的下列网页上找到了问题 极低的 GPU 利…

大模型综合性能考题汇总

- K1.5长思考版本 一、创意写作能力 题目1&#xff1a;老爸笑话 要求&#xff1a;写五个原创的老爸笑话。 考察点&#xff1a;考察模型的幽默感和创意能力&#xff0c;以及对“原创”要求的理解和执行能力。 题目2&#xff1a;创意故事 要求&#xff1a;写一篇关于亚伯拉罕…

在 crag 中用 LangGraph 进行评分知识精炼-下

在上一次给大家展示了基本的 Rag 检索过程&#xff0c;着重描述了增强检索中的知识精炼和补充检索&#xff0c;这些都是 crag 的一部分&#xff0c;这篇内容结合 langgraph 给大家展示通过检索增强生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;的工作流&am…

(二)QT——按钮小程序

目录 前言 按钮小程序 1、步骤 2、代码示例 3、多个按钮 ①信号与槽的一对一 ②多对一&#xff08;多个信号连接到同一个槽&#xff09; ③一对多&#xff08;一个信号连接到多个槽&#xff09; 结论 前言 按钮小程序 Qt 按钮程序通常包含 三个核心文件&#xff1a; m…

win11本地部署 DeepSeek-R1 大模型!免费开源,媲美OpenAI-o1能力,断网也能用

一、下载ollama 二、安装ollama 三、部署DeepSeek-R1 在cmd窗口中先输入ollama -v查看ollama是否安装成功&#xff0c;然后直接运行部署deepseek-r1的命令 ollama run deepseek-r1&#xff0c;出现下面界面即为安装成功。 C:\Users\admin>ollama -v ollama version is 0.5…

【工欲善其事】利用 DeepSeek 实现复杂 Git 操作:从原项目剥离出子版本树并同步到新的代码库中

文章目录 利用 DeepSeek 实现复杂 Git 操作1 背景介绍2 需求描述3 思路分析4 实现过程4.1 第一次需求确认4.2 第二次需求确认4.3 第三次需求确认4.4 V3 模型&#xff1a;中间结果的处理4.5 方案验证&#xff0c;首战告捷 5 总结复盘 利用 DeepSeek 实现复杂 Git 操作 1 背景介绍…

TensorFlow 示例摄氏度到华氏度的转换(一)

TensorFlow 实现神经网络模型来进行摄氏度到华氏度的转换&#xff0c;可以将其作为一个回归问题来处理。我们可以通过神经网络来拟合这个简单的转换公式。 1. 数据准备与预处理 2. 构建模型 3. 编译模型 4. 训练模型 5. 评估模型 6. 模型应用与预测 7. 保存与加载模型 …

gitea - fatal: Authentication failed

文章目录 gitea - fatal: Authentication failed概述run_gitea_on_my_pkm.bat 笔记删除windows凭证管理器中对应的url认证凭证启动gitea服务端的命令行正常用 TortoiseGit 提交代码备注END gitea - fatal: Authentication failed 概述 本地的git归档服务端使用gitea. 原来的用…

MySql运维篇---008:日志:错误日志、二进制日志、查询日志、慢查询日志,主从复制:概述 虚拟机更改ip注意事项

#先登录mysql mysql -uroot -p1234#通过此系统变量&#xff0c;查看当前mysql的版本中默认的日志格式是哪个 show variables like %binlog\_format%;1.2.3 查看 由于日志是以二进制方式存储的&#xff0c;不能直接读取&#xff0c;需要通过二进制日志查询工具 mysqlbinlog 来查…

【背包问题】二维费用的背包问题

目录 二维费用的背包问题详解 总结&#xff1a; 空间优化&#xff1a; 1. 状态定义 2. 状态转移方程 3. 初始化 4. 遍历顺序 5. 时间复杂度 例题 1&#xff0c;一和零 2&#xff0c;盈利计划 二维费用的背包问题详解 前面讲到的01背包中&#xff0c;对物品的限定条件…

使用 DeepSeek-R1 等推理模型将 RAG 转换为 RAT,以实现更智能的 AI

使用 DeepSeek-R1 等推理模型将 RAG 转换为 RAT&#xff0c;以实现更智能的 AI 传统的检索增强生成&#xff08;RAG&#xff09;系统在生成具备上下文感知的答案方面表现出色。然而&#xff0c;它们往往存在以下不足&#xff1a; 精确性不足&#xff1a;单次推理可能会忽略复杂…

小红的合数寻找

A-小红的合数寻找_牛客周赛 Round 79 题目描述 小红拿到了一个正整数 x&#xff0c;她希望你在 [x,2x] 区间内找到一个合数&#xff0c;你能帮帮她吗&#xff1f; 一个数为合数&#xff0c;当且仅当这个数是大于1的整数&#xff0c;并且不是质数。 输入描述 在一行上输入一…

笔灵ai写作技术浅析(三):深度学习

笔灵AI写作的深度学习技术主要基于Transformer架构,尤其是GPT(Generative Pre-trained Transformer)系列模型。 1. Transformer架构 Transformer架构由Vaswani等人在2017年提出,是GPT系列模型的基础。它摒弃了传统的循环神经网络(RNN)和卷积神经网络(CNN),完全依赖自…

IM 即时通讯系统-50-[特殊字符]cim(cross IM) 适用于开发者的分布式即时通讯系统

IM 开源系列 IM 即时通讯系统-41-开源 野火IM 专注于即时通讯实时音视频技术&#xff0c;提供优质可控的IMRTC能力 IM 即时通讯系统-42-基于netty实现的IM服务端,提供客户端jar包,可集成自己的登录系统 IM 即时通讯系统-43-简单的仿QQ聊天安卓APP IM 即时通讯系统-44-仿QQ即…

Zemax 中带有体素探测器的激光谐振腔

激光谐振腔是激光系统的基本组成部分&#xff0c;在光的放大和相干激光辐射的产生中起着至关重要的作用。 激光腔由两个放置在光学谐振器两端的镜子组成。一个镜子反射率高&#xff08;后镜&#xff09;&#xff0c;而另一个镜子部分透明&#xff08;输出耦合器&#xff09;。…

17.2 图形绘制4

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 17.2.5 线条样式 C#为画笔绘制线段提供了多种样式&#xff1a;一是线帽&#xff08;包括起点和终点处&#xff09;样式&#xff1b…