03.04、化栈为队

03.04、化栈为队

1、题目描述

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

2、解题思路

本题要求使用两个栈来实现一个队列。队列遵循先进先出(FIFO)的原则,而栈遵循后进先出(LIFO)的原则。因此,我们需要两个栈来模拟队列的行为:

  1. pushS:用于存储入队的元素。
  2. popS:用于反转元素顺序,以实现队列的出队操作。

3、解题步骤

  1. 入队操作 (push)
    • 将新元素直接压入到 pushS 栈中。
  2. 出队操作 (pop)
    • 检查 popS 栈是否为空:
      • 如果 popS 为空,将 pushS 中的所有元素逐个弹出并压入 popS。这一步将反转元素的顺序,从而实现队列的 FIFO 行为。
      • 如果 popS 不为空,直接弹出并返回 popS 的栈顶元素。
  3. 获取队首元素 (peek)
    • 类似于 pop 操作,只是我们不弹出 popS 栈的栈顶元素,而是返回它。
  4. 检查队列是否为空 (empty)
    • 队列为空的条件是 pushSpopS 都为空。

4、代码详解

class MyQueue {
private:stack<int> pushS; // 入队栈stack<int> popS;  // 出队栈public:MyQueue() {}void push(int x) { pushS.push(x); }int pop() {// 如果出队栈为空,将入队栈的所有元素移到出队栈中if (popS.empty()) {while (!pushS.empty()) {popS.push(pushS.top());pushS.pop();}}int ret = popS.top(); // 获取出队栈的栈顶元素popS.pop();           // 弹出该元素return ret;}int peek() {// 如果出队栈为空,将入队栈的所有元素移到出队栈中if (popS.empty()) {while (!pushS.empty()) {popS.push(pushS.top());pushS.pop();}}return popS.top(); // 返回出队栈的栈顶元素}bool empty() { return pushS.empty() && popS.empty(); }
};

5、时间复杂度

  • 入队操作 (push):O(1)
  • 出队操作 (pop):均摊 O(1),因为每个元素最多只会从 pushS 转移到 popS 一次。
  • 获取队首元素 (peek):均摊 O(1)
  • 检查队列是否为空 (empty):O(1)

6、空间复杂度

  • 使用了两个栈存储元素,空间复杂度为 O(n),其中 n 是队列中元素的数量。

这道题通过使用两个栈,成功模拟了队列的行为,展示了栈和队列之间的转换关系。

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

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

相关文章

【机器学习(九)】分类和回归任务-多层感知机(Multilayer Perceptron,MLP)算法-Sentosa_DSML社区版 (1)11

文章目录 一、算法概念11二、算法原理&#xff08;一&#xff09;感知机&#xff08;二&#xff09;多层感知机1、隐藏层2、激活函数sigma函数tanh函数ReLU函数 3、反向传播算法 三、算法优缺点&#xff08;一&#xff09;优点&#xff08;二&#xff09;缺点 四、MLP分类任务实…

【LLM】OpenAI 的DAY12汇总和o3介绍

note o3 体现出的编程和数学能力&#xff0c;不仅达到了 AGI 的门槛&#xff0c;甚至摸到了 ASI&#xff08;超级人工智能&#xff09;的边。 Day 1&#xff1a;o1完全版&#xff0c;开场即巅峰 12天发布会的开场即是“炸场级”更新——o1完全版。相比此前的预览版本&#x…

智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之2

前情提要 这一次我们暂时抛开前面对“智能工厂的软件设计”的考虑--其软件智能 产品就是 应用程序。直接将这些思维方式和方法论 运用在其具体应用场景中。本文是其中的一个应用场景。 今天用了 一个新的AI助手工具来交流。下面是就这一应用场景和“天意ChatGPT”&#xff08…

高斯核函数(深入浅出)

目录 定义及数学形式主要特点应用示例小结 高斯核函数&#xff08;Gaussian Kernel&#xff09;&#xff0c;又称径向基核&#xff08;Radial Basis Function Kernel&#xff0c;RBF Kernel&#xff09;&#xff0c;是机器学习与模式识别中最常用的核函数之一。它通过在高维空间…

MaixBit k210学习记录

开发背景&#xff1a;Window系统主机&#xff0c;在主机上安装了虚拟机&#xff08;VirtualBoxUbuntu23.04&#xff09; 目标实现&#xff1a;在虚拟机&#xff08;Ubuntu&#xff09;中&#xff0c;实现对Maix bit&#xff08;k210&#xff09;开发板的开发 虚拟机的安装参考…

WordPress TutorLMS插件 SQL注入漏洞复现(CVE-2024-10400)(附脚本)

0x01 产品描述: ‌Tutor LMS‌是一个功能强大的

ExpDemo-JavaFX打造属于你自己的图形化漏洞利用工具

声明&#xff01;本文章所有的工具分享仅仅只是供大家学习交流为主&#xff0c;切勿用于非法用途&#xff0c;如有任何触犯法律的行为&#xff0c;均与本人及团队无关&#xff01;&#xff01;&#xff01; 目录标题 前言编写属于你的图像化漏洞利用工具项目结构编写EXP部署 部…

串口通信标准RS232、RS422、RS485有什么区别和不同

目录 第一个区别&#xff1a;硬件管脚接口定义不同&#xff1a; 第二个区别、工作方式不同 第三个区别、通信方式不同 第四个区别&#xff0c;逻辑特性不同 第五个区别、抗干扰性、传输距离和传输速率也不同 RS-232与RS-485对比 RS-422与RS-485对比 今天给大家分享的是&…

python中的列表及操作

1、列表类型的定义 列表是序列类型的一种扩展&#xff0c;创建后可以随意被修改 使用方括号[]或list()创建&#xff0c;元素间用逗号&#xff0c;分隔 列表中各元素类型可以不同&#xff0c;无长度限制 定义示例&#xff1a; ls [88, cat, dog]2、列表的操作函数和方法 函…

银河麒麟操作系统安装达梦数据库(超详细)

目录 引言1. 前期准备1.1 安装麒麟系统1.2 下载达梦数据库安装包&#xff08;DM8&#xff09;1.3 上传安装包到麒麟系统1.4 挂载安装包&#xff08;iso&#xff09;文件1.5 配置安装用户和组1.6 创建安装路径及修改权限1.7 设置临时安装目录 2. 安装达梦数据库&#xff08;DM8&…

Linux-frp_0.61.1内网穿透的配置和使用

下载frp frp官网 https://gofrp.org/zh-cn/docs/setup/ frp安装包下载地址 https://github.com/fatedier/frp/releases?page1 下载之后在服务器上 解压 tar -zxvf frp_0.61.1_linux_amd64.tar.gztar&#xff1a;一个用于压缩和解压缩的工具。-z&#xff1a;表示使用 gzi…

【操作系统】如何创建一个守护进程

守护进程&#xff08;Daemon&#xff09;是一类在后台运行的特殊进程&#xff0c;它们通常不与任何终端或用户直接交互&#xff0c;而是执行特定的系统任务或等待系统或网络事件的发生。守护进程是操作系统中不可或缺的一部分&#xff0c;它们负责执行各种后台任务&#xff0c;…

Unity开发AR之Vuforia-MultiTarget笔记

前言 在增强现实(AR)技术蓬勃发展的今天,越来越多的开发者开始探索如何将AR应用于各种场景中。Vuforia作为一个领先的AR开发平台,为开发者提供了强大的工具和功能,使得创建AR体验变得更加简单和直观。本文将为您介绍Vuforia的基本概念、特点,以及如何配置和使用MultiTar…

python|利用ffmpeg按顺序合并指定目录内的ts文件

前言&#xff1a; 有的时候我们利用爬虫爬取到的ts文件很多&#xff0c;但ts文件只是视频片段&#xff0c;并且这些视频片段是需要按照一定的顺序合并的&#xff0c;通常ts文件合并输出格式为mp4格式 因此&#xff0c;本文介绍利用python&#xff0c;调用ffmpeg来批量的按自己…

【Python】 基于Python实现日志聚合与分析工具:利用Logstash与Fluentd构建高效分布式日志系统

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在分布式系统中,日志数据的生成速度和数量呈指数级增长,传统的日志管理方式已无法满足现代企业对实时性、可扩展性和高效性的需求。本文深…

04.HTTPS的实现原理-HTTPS的混合加密流程

04.HTTPS的实现原理-HTTPS的混合加密流程 简介1. 非对称加密与对称加密2. 非对称加密的工作流程3. 对称加密的工作流程4. HTTPS的加密流程总结 简介 主要讲述了HTTPS的加密流程&#xff0c;包括非对称加密和对称加密两个阶段。首先&#xff0c;客户端向服务器发送请求&#xf…

【从零开始入门unity游戏开发之——C#篇34】C#匿名函数(delegate )和Lambda表达式

文章目录 一、匿名函数&#xff08;delegate &#xff09;1、什么是匿名函数&#xff1f;2、匿名函数的基本语法2.1 语法2.2 **没有参数的匿名函数&#xff1a;**2.3 **有参数的匿名函数&#xff1a;**2.4 **有返回值的匿名函数&#xff1a;** 3、匿名函数的使用示例3.1 作为参…

IDEA开发Java应用的初始化设置

一、插件安装 如下图所示&#xff1a; 1、Alibaba Java Coding Guidelines 2.1.1 阿里开发者规范&#xff0c;可以帮忙本地自动扫描出不符合开发者规范的代码&#xff0c;甚至是代码漏洞提示。 右击项目&#xff0c;选择《编码规约扫描》&#xff0c;可以进行本地代码规范扫…

vue2/3,Spring Boot以及生产环境跨域解决方案

vue2和vue3跨域解决方案 Vue 2 (基于 Webpack) 的跨域解决方案 1. 创建或编辑 vue.config.js 文件 Vue CLI为Webpack项目提供了简单的代理配置方式。你可以通过创建或编辑项目的根目录下的 vue.config.js 文件来设置开发服务器的代理规则&#xff1a; // vue.config.js mod…

java相关学习文档或网站整理

1. mybatis MyBatis 3 | Introduction – mybatis 中文版&#xff1a; MyBatis 3 | 简介 – mybatis github版&#xff1a; Releases mybatis/mybatis-3 2. maven仓库 https://mvnrepository.com/