剑指offer 31. 栈的压入、弹出序列
声明:本系列博客是对何海涛《剑指offer》的关键点总结。
1.问题描述
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。
如第一个输入序列为{1 2 3 4 5},第二个为{ 4 5 3 2 1}(是),{4 3 5 1 2}(否)。
2.解题思路
1)使用一个辅助栈保存压栈序列;
2)如果下一个弹出的数字刚好是栈顶数字,那么直接弹出;
3)如果下一个弹出的数字不在栈顶,则把压栈系列中还没有入栈的数字压入辅助栈,直到把下一个弹出的数字压入栈顶为止;
4)如果所有数字都压入栈后仍然没有找到下一个要弹出的数字,那么该序列不可能是一个弹出序列。
3.代码实现
bool isPopOder(vector<int> &vecPush, vector<int> &vecPop){if (vecPop.size() != vecPush.size() || vecPop.empty() || vecPush.empty())return false;bool res = false;stack<int> istack;int idxPush = 0;int idxPop = 0;while (idxPop < vecPop.size()){//栈为空,或者当前栈顶的元素不是要弹出的数字,则需要把数字压入栈while (istack.empty() || istack.top() != vecPop[idxPop]){//数字全部入栈了,则跳出循环if (idxPush == vecPush.size())break;//数字未全部入栈了,则入栈,直到栈顶是想要弹出的数字if (idxPush < vecPush.size()){istack.push(vecPush[idxPush]);idxPush++;}}//该层while循环结束有2种://1. 栈不为空且栈顶是想要弹出的数字//2. 没有可以入栈的了//2的情况下直接跳出当前if (istack.top() != vecPop[idxPop])break;//1的情况下话弹出栈顶元素,入栈元素索引加1else{istack.pop();idxPush++;}}//该层while循环结束的条件://1.没有可以入栈的元素了,但是栈顶不是想要弹出的数字//2.没有可以弹出的元素了//只有栈为空且没有需要弹出的元素时才结束if (istack.empty() && idxPop == vecPop.size())res = true;return res;
}
剑指offer 31. 栈的压入、弹出序列相关推荐
- 【LeetCode】剑指 Offer 31. 栈的压入、弹出序列
[LeetCode]剑指 Offer 31. 栈的压入.弹出序列 文章目录 [LeetCode]剑指 Offer 31. 栈的压入.弹出序列 package offer;import java.uti ...
- 剑指Offer 31 栈的压入、弹出序列
栈的压入.弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2 ...
- 剑指offer——31.栈的压入、弹出序列(想法不错,比剑指的简单)
题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈 ...
- 剑指 Offer 31. 栈的压入、弹出序列【无取巧,易于理解!】
看题解时,很多大牛用很少的代码就完成了AC,但可能看了很多遍也看不懂,因此萌生了写一种最"笨"最完整的代码的想法,这样大家可以通过我的代码入门,看懂了再去挑战大牛们的简洁解法. 输 ...
- 【算法】剑指 Offer 31. 栈的压入、弹出序列 【重刷】
1.概述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2 ...
- 【LeetCode笔记】剑指 Offer 31. 栈的压入、弹出序列 (Java、栈)
文章目录 题目描述 代码 && 思路 二刷 题目描述 打卡第三天!加油加油- 数据结构笔试题貌似也会考= =,不过考法不一样,有点规律. 总的来说还是挺有意思的,我们直接来看代码吧- ...
- 【剑指offer-Java版】22栈的压入弹出序列
栈的压入弹出序列:给定两个序列,一个是压入顺序,判断另外一个是否是该压入顺序的一个弹出顺序 思路:纯粹的模拟栈的压入和弹出顺序 分别遍历压栈序列seq1和另一个序列seq2 比较当前栈顶元素和seq2 ...
- 剑指Offer之栈的压入、弹出序列
题目描述 输入两个整数序列,第一个序列表示栈的压入书序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相同.例如1.2.3.4.5是某栈的压入序列,序列5.4.3.2.1是该栈对应的一 ...
- 剑指offer:栈的压入、弹出序列
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...
最新文章
- NPM采用Rust以消除性能瓶颈
- 【资讯】这10大科技,将彻底改变你的生活
- php mvc 参数传递数组,PHP MVC在帖子上添加到数组
- Unity开发《一起来捉妖》教程 | 4.抛掷封妖灵珠
- 中秋佳节,献上笔试题一道,祝各位事业蒸蒸日上!
- 仓库建设-斜率优化DP
- oracle iso,Oracle数据库之Linux操作系统各版本ISO镜像下载(包括oracle linux\redhat\centos\u...
- 软件测试的底层逻辑是什么?
- web服务器 怎样上传文件,文件上传web服务器
- 数据库查询时报IllegalArgumentException异常是什么原因?
- php excel扩展名,excel后缀名是什么
- 关于固态硬盘SSD的4K对齐
- 什么叫机械硬盘_机械硬盘内部是什么结构?
- bios中 启动首选项 找不到固态硬盘
- 蛋蛋读UFS之三:UFS数据包UPIU
- 汽车牌照的排序与查询
- telnet远程管理的命令
- c语言git代码注释风格,git代码格式化上传
- SU草图大师错误合集
- Reactive Extensions (Rx) 入门(3) —— Rx的事件编程①
热门文章
- you-get使用教程
- 怎么设置ie10默认浏览模式为兼容模式
- 紫宸激光:FPC排线、LCD模组的激光焊锡解决方案
- PS制作咖啡闹钟、故障文字
- Praat脚本-009 | 提取时长和基频
- [硬件项目] 2、汽车倒车雷达设计——基于专用倒车雷达芯片GM3101的设计方案与采用CX20106A红外线检测芯片方案对比...
- 为华生物PCL-NH2 聚己内酯氨基的简介及应用说明
- machine learning : 最小二乘法之线性函数 --- python实现
- 计算机视觉两个入门数据集(mnist和fashion mnist)本地下载地址
- 【软考中级】多媒体应用设计师复习笔记第十章