题目描述

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列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]-栈的压入、弹出序列相关推荐

  1. 【剑指offer-Java版】22栈的压入弹出序列

    栈的压入弹出序列:给定两个序列,一个是压入顺序,判断另外一个是否是该压入顺序的一个弹出顺序 思路:纯粹的模拟栈的压入和弹出顺序 分别遍历压栈序列seq1和另一个序列seq2 比较当前栈顶元素和seq2 ...

  2. 剑指offer面试题31. 栈的压入、弹出序列(链表)

    题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2 ...

  3. 剑指offer(21)栈的压入、弹出序列

    题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该 ...

  4. 剑指offer-21.栈的压入弹出序列

    1.题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...

  5. 数据结构与算法--举例分析法- 栈的压入弹出序列

    举例分析 与上两篇问中画图方法一样,我们可以用举例模拟的方法思考分析复杂问题.当一眼不能看出问题的规律的时候,我们可以用几个具体的例子来模拟一下问题的过程.这样就和我们在程序出现问题时候的debug一 ...

  6. 剑指offer(21)栈的压入、探出序列

    链接:https://www.nowcoder.com/questionTerminal/d77d11405cc7470d82554cb392585106 思路:借用一个辅助的栈,遍历压栈顺序,先将第 ...

  7. python 栈的压入弹出序列

    | 栈的压入和弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序, 请判断第二个序列是否为该栈的弹出顺序. 假设压入栈的所有数字均不相等. 例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序 ...

  8. 剑指offer——面试题22:栈的压入、弹出序列

    剑指offer--面试题22:栈的压入.弹出序列 Solution1: 要理解并背诵此题! 参考网址: https://www.cnblogs.com/AndyJee/p/4651281.html h ...

  9. 剑指offer——面试题41:和为S的连续整数序列

    剑指offer--面试题41:和为S的连续整数序列 Solution1:我的答案 基本思路是根据等差数列的前n项和推导出首项与项数的关系,设首项为a1a1a_1,项数为kkk,和为S" ro ...

最新文章

  1. 安卓程序员永远不懂iOS程序员的痛? | 每日趣闻
  2. linux python脚本返回,在C/python中执行linux命令并得到返回值以及输出
  3. 题目1465:最简真分数
  4. matlab程序和程序文件
  5. 使用BigDecimal进行精确运算
  6. 微软公司等数据结构+算法面试100题2010版全部出炉
  7. 大工18春计算机文化基础在线测试1,大工18春《计算机文化基础》在线测试1(满分答案)...
  8. 二进制补码以及为什么要使用补码
  9. 数据可视化 - 什么是数据可视化
  10. Android Layout inflate过程分析(1)
  11. 显示空闲链表和隐式空闲链表_使用空闲资源添加Espresso UI测试
  12. 改纸盒大小_关于纸箱尺寸的一些知识
  13. 衡水年内计划发放万张农民工“一卡通” 防止拖欠工资
  14. 缓冲区溢出基础实践(二)——ROP 与 hijack GOT
  15. java实现斗地主发牌案例简单易懂
  16. 用【python】自做动图
  17. 跨域读写Cookie
  18. CityMaker学习教程03 数据的导入
  19. 03 KEY BUZZ
  20. Hauppague 哈帕克 PCIe 视频采集卡 ImpactVCB-e花屏问题解决和SDK集成

热门文章

  1. 简单的中文分词加上kmean聚类 (c++)
  2. 桌面虚拟化之PCoIP访问协议硬卡介绍
  3. ASP.NET DEMO 18: 如何编程动态创建 Menu
  4. 不需要的系统垃圾把它杀掉!
  5. 7-3 主从复制配置
  6. php格式转为jpg格式,如何在PHP中将所有图像转换为JPG格式?
  7. css3弧形跑道效果_【Tableau 图表】你是不是真的需要一个跑道图呢?
  8. 步进电机只能一个方向转?
  9. What Are The Differences Between Base, Medium, and Full Camera Link Configurations?
  10. 米范 - 为新媒体和电商从业者提供的酷导航