数据结构学习 jz31 栈的压入、弹出序列

关键词:模拟 栈

不太熟,调了好一阵子。

题目:https://leetcode.cn/problems/zhan-de-ya-ru-dan-chu-xu-lie-lcof/

 

思路:

主要是利用一个辅助栈,来模拟这个过程,如果过程不行就返回失败。

int sig = 0;如果这一轮没有任何操作,说明卡住了,返回false

int put = 0;记录推入的次数

int pop = 0;记录推出的次数

一直推入,直到和要推出的第一个数相同。

            while (put < putIn.size()){sk.push(putIn[put]);put++;//指向下一个准备被推入的数sig = 1;if (sk.top() == takeOut[pop])break;}

 一直推出,直到和辅助栈栈顶元素不一样。

如果所有都推出了pop == takeOut.size(),则说明成功,返回true。

            while (pop < takeOut.size() && !sk.empty() && sk.top() == takeOut[pop]){sk.pop();pop++;//指向下一个准备被推出的数sig = 1;if (pop == takeOut.size())return true;}

复杂度计算:

时间复杂度O(n) 2n进进出出

空间复杂度O(n) 辅助栈 

代码:

class Solution {
public:bool validateBookSequences(std::vector<int>& putIn, std::vector<int>& takeOut) {if (takeOut.empty()) return true;std::stack<int> sk;int put = 0;int pop = 0;while (true){int sig = 0;while (put < putIn.size()){sk.push(putIn[put]);put++;//指向下一个准备被推入的数sig = 1;if (sk.top() == takeOut[pop])break;}while (pop < takeOut.size() && !sk.empty() && sk.top() == takeOut[pop]){sk.pop();pop++;//指向下一个准备被推出的数sig = 1;if (pop == takeOut.size())return true;}if (sig == 0)return false;}}
};

k神答案:非常简洁,建议学习

class Solution {
public:bool validateBookSequences(vector<int>& putIn, vector<int>& takeOut) {stack<int> stk;int i = 0;for(int num : putIn) {stk.push(num); // num 入栈while(!stk.empty() && stk.top() == takeOut[i]) { // 循环判断与出栈stk.pop();i++;}}return stk.empty();//因为最后结果是所有数都要出栈,所以stk如果还有数就说明失败}
};

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

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

相关文章

Java研学-分页查询

一 分页概述 1 介绍 将大量数据分段显示&#xff0c;避免一次性加载造成的内存溢出风险 2 真假分页 ① 真分页   一次性查询出所有数据存到内存&#xff0c;翻页从内存中获取数据&#xff0c;性能高但易造成内存溢出 ② 假分页   每次翻页从数据库中查询数据&#xff0c…

解决计算机中vcruntime140.dll错误!六种方法教你修复

什么是vcruntime140.dll文件呢&#xff1f;为什么会出现丢失的情况&#xff1f;如何解决这个问题呢&#xff1f;本文将为您详细介绍vcruntime140.dll文件的作用、丢失原因以及6个快速解决方法。 一、vcruntime140.dll是什么文件&#xff1f; vcruntime140.dll是Visual C Redi…

聚合收益协议 InsFi :打开铭文赛道全新叙事的旋转门

​“InsFi 协议构建了一套以铭文资产为基础的聚合收益体系&#xff0c;该体系正在为铭文资产捕获流动性、释放价值提供基础&#xff0c;该生态也正在成为铭文赛道掘金的新热土。” 在 2023 年年初&#xff0c;Ordinals 协议在比特币链上被推出后&#xff0c;为比特币链上带来了…

STC51+TLC2543+ADXL335+proteus

51单片机解析adxl335振动检测蜂鸣器报警课设 通过按键调整振动检测阈值 传感器介绍 TLC2543&#xff1a;12 位精密模数转换器&#xff0c;原理图与引脚功能描述如下所示&#xff1a; 引脚功能1~9、11、12模拟量输入通道10GND电源地13REF-为负基准电压端14REF为正基准电压端…

基于ssm的课程在线教学平台设计与实现论文

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统Java课程教学信息管理难度大&#xff0c;容错率低&#x…

Referring Expression Comprehension(REC)任务介绍以及相关数据集

Referring Expression Comprehension&#xff08;REC&#xff09;&#xff0c;即指称表达理解&#xff0c;任务是根据文本描述框出文本中提到的一个特定目标相关数据集&#xff1a; 是三个从 MSCOCO 中选取图像得到的数据集&#xff0c;数据集中对所有的 phrase 都有 bbox 的标…

【html】Video元素的属性介绍和用法

简言 HTML <video> 元素 用于在 HTML 或者 XHTML 文档中嵌入媒体播放器&#xff0c;用于支持文档内的视频播放。 平常若涉及到视频内容&#xff0c;就会使用到它。 video Video使用 只有一个视频源 只有一个视频的话&#xff0c;在\video元素中的src属性填入即可。 …

【工作周志】240108-240114

Q&#xff1a;set_property bitstream.config.timer_cfg 这样的配置用于哪里&#xff1f; A&#xff1a;https://www.cnblogs.com/lazypigwhy/p/10450406.html FPGA通过CPU远程升级方案_bitstream.config.timer_cfg-CSDN博客 Q&#xff1a;逛论坛有人问&#xff0c;reg也可以…

数据资产入表背后:中国To B数字化驶入“数据时代”

数据资产“入表”&#xff0c;更像是一剂通过颠覆旧的生产关系&#xff0c;从根上医治数字化转型的“良方”。 那么&#xff0c;数据资产到底是什么&#xff1f;以及在愈发被规范的数据市场大背景下&#xff0c;对中国的To B企业和To B服务商而言&#xff0c;正在或者即将发生…

快速解密Word密码工具,轻松获取文档权限

Word文档怎么解密、找回密码、去除密码&#xff1f;这是最简单的办法&#xff01; 文章&#xff1a;具体步骤如下&#xff1a;1.百度搜索【 密码帝官网 】&#xff0c;2.点击“立即开始”在用户中心上传需要解密的文件稍等片刻就能找找回密码。方法非常安全&#xff0c;不用下载…

RKE安装k8s及部署高可用rancher之证书通过cert-manager

1.安装rke和local集群 [rootnginx 2.5.8]# rke -v rke version v1.5.1 [rootnginx cert-manager]# rke up --config locale-cluster.ym [rootnginx 2.5.8]# cat locale-cluster.yml nodes:- address: 192.168.1.65internal_address: 192.168.1.65hostname_override: 192.168.…

【记忆化搜索】

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;【LeetCode】winter vacation training 前言 记忆化搜索是一种优化搜索算法的方法&#xff0c;它可…

框架自带sidebar配置

路由配置的页面 在这个框架里面,需要删除一些东西,在VueRouter里面,创建好两个路由,一个是由export default导出去的,一个是由export导出去的,有很多人问,为什么要创建两个路由呢? 为了后期的权限管理做准备&#xff0c; 为什么显示出来的只有一个路由的界面呢? 在路由注…

基于JavaWeb+BS架构+SpringBoot+Vue基于hive旅游数据的分析与应用系统的设计和实现

基于JavaWebBS架构SpringBootVue基于hive旅游数据的分析与应用系统的设计和实现 文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 文末获取源码 Lun文目录 1 概 述 5 1.1 研究背景 5 1.2 研究意义 5 1.3 研究内容…

探索sklearn中SVM模型的原理及使用案例

大家好&#xff0c;支持向量机&#xff08;Support Vector Machines&#xff0c;SVM&#xff09;是一种经典的机器学习算法&#xff0c;被广泛应用于分类和回归任务中。在sklearn库中&#xff0c;SVM模型提供了简单易用的API&#xff0c;使得开发者可以方便地应用SVM算法解决实…

如何解除PDF密码限制?快速地删除密码保护的方法。

文章PDF密码找回、解密、去除密码方法详解 文章具体步骤如下&#xff1a;第一步&#xff0c;利用手机或电脑打开浏览器&#xff0c;然后百度搜索【密码帝官网】。第二步&#xff0c;进入官网后点击“立即开始”&#xff0c;在用户中心上传需要解密的PDF文件。这是最简单、安全、…

Java实现二维码、条形码生成器

文章目录 前言 在数字化时代&#xff0c;二维码已经成为了信息交流的一种常见方式。它们被广泛用于各种应用&#xff0c;从产品标签到活动传单&#xff0c;以及电子支付。本文将向您展示如何在Spring Boot应用程序中整合ZXing库&#xff0c;以创建和解析QR码。无论您是想为您的…

常用文件文档能做二维码吗?多种文件在线做二维码的方法

二维码是现在工作和生活中随处可见&#xff0c;可以用来展现很多不同的内容。现在很多下发通知的文件、教程或者其他文件内容&#xff0c;也会制作成二维码图片后&#xff0c;让其他人通过扫码来获取文件内容。最简单的制作方法就是通过二维码生成器来制作&#xff0c;支持多种…

【KMP】【二分查找】【C++算法】100207. 找出数组中的美丽下标 II

作者推荐 【矩阵快速幂】封装类及测试用例及样例 本文涉及的基础知识点 二分查找算法合集 LeetCode100207. 找出数组中的美丽下标 II 给你一个下标从 0 开始的字符串 s 、字符串 a 、字符串 b 和一个整数 k 。 如果下标 i 满足以下条件&#xff0c;则认为它是一个 美丽下标…