剑指offer面试题[22]-栈的压入、弹出序列
题目描述
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
//添加代码
}
};
分析:假设 pushV={1,2,3,4,5},popV={4,5,3,2,1}。
首先由pushV.size()可以得到元素个数length,
创建一个辅助栈stackData,将pushV首元素压入到辅助栈中,然后判断与popV中的第一个元素是否相等,若不等,继续将pushV中的元素压入到辅助栈中,每次压入后判断是否与popV中的第一个元素是否相等,直到相等为止。然后将stackData中栈顶元素弹出,继续比较stackData中剩余元素是否与popV中的第二个元素相等,若不等,继续将pushV中的元素压入到辅助栈中,每次还是判断是否与popV中的第二个元素相等,若相等,弹出stackData中栈顶元素。。。依次执行下去,最后若stackData为空,说明popV可以是pushV的一个弹出序列。
示例:
1)依次将pushV中元素1、2、3压入到辅助栈stackData中,直到找到弹出序列popV中的第一个元素4。
stackData: 1 stackData: 2 .... stackData: 4
1 3
2
1
2)将辅助栈stackData栈顶元素4弹出,此时的栈顶元素3与popV中第二个元素5不相等,继续将pushV中元素5压入到辅助栈stackData中,此时栈顶元素5与popV中第二个元素5相等,如下:
stackData: 5
3
2
1
3) 将 辅助栈stackData栈顶元素5弹出,此时的栈顶元素3与popV中第三个元素3相等,弹出stackData栈顶元素3,此时栈顶元素为2,与popV中第四个元素2相等,弹出tackData栈顶元素2,此时此时栈顶元素为1,与popV中第五个元素1相等,弹出。
4)此时的stackData为空栈,则说明存在一种入栈和出栈操作使得popV为pushV的弹出序列。
代码如下:
class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
int length=pushV.size( );
bool possible=false;
if(!pushV.empty( )&&!popV.empty( )&&length>0)
{
stack<int> stackData;
int pop_index=0;
for(int i=0;i<length;i++)
{
stackData.push(pushV[i]);
while( !stackData.empty()&&stackData.top()==popV[pop_index]) //一定注意要判断stackData.empty()
{
stackData.pop( );
pop_index++;
}
if(stackData.empty())
{
possible=true;
return possible;
}
}
return possible;
}
}
};
剑指offer面试题[22]-栈的压入、弹出序列相关推荐
- 【剑指offer-Java版】22栈的压入弹出序列
栈的压入弹出序列:给定两个序列,一个是压入顺序,判断另外一个是否是该压入顺序的一个弹出顺序 思路:纯粹的模拟栈的压入和弹出顺序 分别遍历压栈序列seq1和另一个序列seq2 比较当前栈顶元素和seq2 ...
- 剑指offer面试题31. 栈的压入、弹出序列(链表)
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2 ...
- 剑指offer(21)栈的压入、弹出序列
题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该 ...
- 剑指offer-21.栈的压入弹出序列
1.题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...
- 数据结构与算法--举例分析法- 栈的压入弹出序列
举例分析 与上两篇问中画图方法一样,我们可以用举例模拟的方法思考分析复杂问题.当一眼不能看出问题的规律的时候,我们可以用几个具体的例子来模拟一下问题的过程.这样就和我们在程序出现问题时候的debug一 ...
- 剑指offer(21)栈的压入、探出序列
链接:https://www.nowcoder.com/questionTerminal/d77d11405cc7470d82554cb392585106 思路:借用一个辅助的栈,遍历压栈顺序,先将第 ...
- python 栈的压入弹出序列
| 栈的压入和弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序, 请判断第二个序列是否为该栈的弹出顺序. 假设压入栈的所有数字均不相等. 例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序 ...
- 剑指offer——面试题22:栈的压入、弹出序列
剑指offer--面试题22:栈的压入.弹出序列 Solution1: 要理解并背诵此题! 参考网址: https://www.cnblogs.com/AndyJee/p/4651281.html h ...
- 剑指offer——面试题41:和为S的连续整数序列
剑指offer--面试题41:和为S的连续整数序列 Solution1:我的答案 基本思路是根据等差数列的前n项和推导出首项与项数的关系,设首项为a1a1a_1,项数为kkk,和为S" ro ...
最新文章
- 安卓程序员永远不懂iOS程序员的痛? | 每日趣闻
- linux python脚本返回,在C/python中执行linux命令并得到返回值以及输出
- 题目1465:最简真分数
- matlab程序和程序文件
- 使用BigDecimal进行精确运算
- 微软公司等数据结构+算法面试100题2010版全部出炉
- 大工18春计算机文化基础在线测试1,大工18春《计算机文化基础》在线测试1(满分答案)...
- 二进制补码以及为什么要使用补码
- 数据可视化 - 什么是数据可视化
- Android Layout inflate过程分析(1)
- 显示空闲链表和隐式空闲链表_使用空闲资源添加Espresso UI测试
- 改纸盒大小_关于纸箱尺寸的一些知识
- 衡水年内计划发放万张农民工“一卡通” 防止拖欠工资
- 缓冲区溢出基础实践(二)——ROP 与 hijack GOT
- java实现斗地主发牌案例简单易懂
- 用【python】自做动图
- 跨域读写Cookie
- CityMaker学习教程03 数据的导入
- 03 KEY BUZZ
- Hauppague 哈帕克 PCIe 视频采集卡 ImpactVCB-e花屏问题解决和SDK集成
热门文章
- 简单的中文分词加上kmean聚类 (c++)
- 桌面虚拟化之PCoIP访问协议硬卡介绍
- ASP.NET DEMO 18: 如何编程动态创建 Menu
- 不需要的系统垃圾把它杀掉!
- 7-3 主从复制配置
- php格式转为jpg格式,如何在PHP中将所有图像转换为JPG格式?
- css3弧形跑道效果_【Tableau 图表】你是不是真的需要一个跑道图呢?
- 步进电机只能一个方向转?
- What Are The Differences Between Base, Medium, and Full Camera Link Configurations?
- 米范 - 为新媒体和电商从业者提供的酷导航