03.04、化栈为队
03.04、化栈为队
1、题目描述
实现一个 MyQueue 类,该类用两个栈来实现一个队列。
2、解题思路
本题要求使用两个栈来实现一个队列。队列遵循先进先出(FIFO)的原则,而栈遵循后进先出(LIFO)的原则。因此,我们需要两个栈来模拟队列的行为:
- pushS:用于存储入队的元素。
- popS:用于反转元素顺序,以实现队列的出队操作。
3、解题步骤
- 入队操作 (
push):- 将新元素直接压入到
pushS栈中。
- 将新元素直接压入到
- 出队操作 (
pop):- 检查 popS 栈是否为空:
- 如果
popS为空,将pushS中的所有元素逐个弹出并压入popS。这一步将反转元素的顺序,从而实现队列的 FIFO 行为。 - 如果
popS不为空,直接弹出并返回popS的栈顶元素。
- 如果
- 检查 popS 栈是否为空:
- 获取队首元素 (
peek):- 类似于
pop操作,只是我们不弹出popS栈的栈顶元素,而是返回它。
- 类似于
- 检查队列是否为空 (
empty):- 队列为空的条件是
pushS和popS都为空。
- 队列为空的条件是
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 是队列中元素的数量。
这道题通过使用两个栈,成功模拟了队列的行为,展示了栈和队列之间的转换关系。
相关文章:
03.04、化栈为队
03.04、化栈为队 1、题目描述 实现一个 MyQueue 类,该类用两个栈来实现一个队列。 2、解题思路 本题要求使用两个栈来实现一个队列。队列遵循先进先出(FIFO)的原则,而栈遵循后进先出(LIFO)的原则。因此…...
Coppelia Sim (v-REP)仿真 机器人3D相机手眼标定与实时视觉追踪 (二)
coppelia sim[V-REP]仿真实现 机器人于3D相机手眼标定与实时视觉追踪 二 zmq API接口python调用python获取3D相机的数据获取彩色相机的数据获取深度相机的数据用matpolit显示 python控制机器人运动直接控制轴的位置用IK运动学直接移动到末端姿态 相机内参的标定记录拍照点的位置…...
苏州金龙技术创新赋能旅游新质生产力
2024年10月23日,备受瞩目的“2024第六届旅游出行大会”在云南省丽江市正式开幕。作为客车行业新质生产力标杆客车,苏州金龙在大会期间现场展示了新V系V12商旅版、V11和V8E纯电车型,为旅游出行提供全新升级方案。 其中,全新15座V1…...
ceph pg stale 恢复
问题 如果 ceph -s 看到 ceph 有类似如下状态的 pg data:volumes: 1/1 healthypools: 5 pools, 113 pgsobjects: 6.94k objects, 22 GiBusage: 24 GiB used, 33 TiB / 33 TiB availpgs: 0.885% pgs not active366/13880 objects degraded (2.637%)...
Openlayers高级交互(8/20):选取feature,平移feature
本示例介绍如何在vue+openlayers中使用Translate,选取feature,平移feature。选择的时候需要按住shift。Translate 功能通常是指在地图上平移某个矢量对象的位置。在 OpenLayers 中,可以通过修改矢量对象的几何位置来实现这一功能。 效果图 配置方式 1)查看基础设置:http…...
uniapp renderjs页面传值
scrip标签里加 lang“renderjs” ,可以使用原生js的dom,但是我在使用中发现以下问题,导致数据不能动态获取 1. onLoad获取上级页面传值 // APP不会触发,h5可以 2. props不会触发 解决办法添加 script 逻辑层数据传入渲染层 ren…...
AI赋能R-Meta分析核心技术:从热点挖掘到高级模型、助力高效科研与论文发表
Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,现已广泛应用于农林生态,资源环境等方面,成为Science、Nature论文的…...
AMD锐龙8845HS+780M核显 虚拟机安装macOS 15 Sequoia 15.0.1 (2024.10)
最近买了机械革命无界14X,CPU是8845HS,核显是780M,正好macOS 15也出了正式版,试试兼容性,安装过程和之前差不多,这次我从外网获得了8核和16核openCore,分享一下。 提前发一下ISO镜像地址和open…...
当事人单方委托专业机构或个人出具的书面意见,证据效力如何认定?
裁判要旨:当事人就专门性问题单方自行委托专业机构或者个人出具的书面意见,虽然不属于民事诉讼法上所称的由人民法院经由司法鉴定程序所获得的鉴定意见,但法律并未排除其作为证据的资格。对一方当事人就专门性问题自行委托有关机构或者人员出…...
AUTOSAR CP 中 BswM 模块功能与使用介绍(2/2)
三、 AUTOSAR BswM 模块详解及 ARXML 示例 BswM 模块的主要功能 BswM(Basic Software Mode Manager)模块在 AUTOSAR 架构中扮演着模式管理的核心角色。它负责管理车辆的各种模式(如启动、运行、停车等),并根据不同的…...
PCB电路板为什么大多是绿色的
PCB电路板为什么大多是绿色的 1.绿色油墨为什么最常用?1.1.性能角度1.2.经济和历史角度1.3.人文和环保角度 2.误区:黑色PCB板更高端?3.总结 PCB电路板上面的绿色是一层阻焊油墨(solder mask),主要作用&…...
Golang | Leetcode Golang题解之第508题出现次数最多的子树元素和
题目: 题解: func findFrequentTreeSum(root *TreeNode) (ans []int) {cnt : map[int]int{}maxCnt : 0var dfs func(*TreeNode) intdfs func(node *TreeNode) int {if node nil {return 0}sum : node.Val dfs(node.Left) dfs(node.Right)cnt[sum]if…...
【安全解决方案】深入解析:如何通过CDN获取用户真实IP地址
一、业务场景 某大型互联网以及电商公司为了防止客户端获取到真实的ip地址,以及达到保护后端业务服务器不被网站攻击,同时又可以让公安要求留存网站日志和排查违法行为,以及打击犯罪的时候,获取不到真实的ip地址,发现…...
git 免密的方法
方法一: 通过生成credential配置 git config --global credential.helper store 查看.gitconfig文件,发现多了一行 [credential] helper store 方法二: 修改仓库中.git/config文件 url http://账号:密码git.test.com.cn/test/xx.git或者带…...
如何用 obdiag 排查 OceanBase数据库的卡合并问题——《OceanBase诊断系列》14
1. 背景 卡合并在OceanBase中是一个复杂的问题,其产生可能源于多种因素。目前,对于卡合并的明确界定尚不存在统一标准,一方面,我们界定超过36小时未完成合并为合并超时,此时RS会记录ERROR日志;另一方面&am…...
hackme靶机渗透流程
一,搭建环境 本次测试使用hackme的靶机 攻击为kali(192.168.30.130)与物理机 二,信息收集 1.确定IP 先确定mac信息,再搭配主机扫描确定靶机的IP地址 00:0C:29:D0:F5:74 确定靶机地址为 192.168.30.133 2.扫描靶机…...
uniapp 常用的地区行业各种多选多选,支持回显,复制粘贴可使用
uniapp 常用的地区行业各种多选多选,支持回显 必须导入uni-popup 弹出层 该组件 1.目前项目开发中使用到这类似挺多的,记录一下,方便以后是使用 2.使用前提,目前不做无限级,只支持二维数组,模板里只循环了两…...
iOS 本地存储地址(位置)
前言: UserDefaults 存在沙盒的 Library --> Preferences--> .plist文件 CoreData 存在沙盒的 Library --> Application Support--> xx.sqlite 一个小型数据库里 (注:Application Support 这个文件夹已开始是没有的,只有当你写了存储代码,运行之后,目录里才会出…...
uni.showLoading 时禁止点击(防止表单重复提交) 小程序调取微信支付
在使用 uni.showLoading 时,如果需要禁用点击事件,可以在调用 uni.showLoading 之前设置全局的触摸事件为禁用状态,然后在 uni.hideLoading 之后再重新启用。 mask 选项是 uni.showLoading 的一个参数,当设置为 true 时,会显示遮罩,此时用户不能点击底层的任何内容。 // …...
OpenClash与Tailscale冲突得问题
1.问题描述:开了openclash之后,tailscale就用不了。tailscale ping XXX.XXX.XXX.XXX 可以成功。但是用cmd的ping就不通。 2.tailscale登录得时候,加上这两个参数:--accept-dnsfalse 和 --netfilter-modeoff 。 示例:t…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权
摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题:安全。文章将详细阐述认证(Authentication) 与授权(Authorization的核心概念,对比传统 Session-Cookie 与现代 JWT(JS…...
