声明:本系列博客是对何海涛《剑指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. 栈的压入、弹出序列相关推荐

  1. 【LeetCode】剑指 Offer 31. 栈的压入、弹出序列

    [LeetCode]剑指 Offer 31. 栈的压入.弹出序列 文章目录 [LeetCode]剑指 Offer 31. 栈的压入.弹出序列 package offer;import java.uti ...

  2. 剑指Offer 31 栈的压入、弹出序列

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

  3. 剑指offer——31.栈的压入、弹出序列(想法不错,比剑指的简单)

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

  4. 剑指 Offer 31. 栈的压入、弹出序列【无取巧,易于理解!】

    看题解时,很多大牛用很少的代码就完成了AC,但可能看了很多遍也看不懂,因此萌生了写一种最"笨"最完整的代码的想法,这样大家可以通过我的代码入门,看懂了再去挑战大牛们的简洁解法. 输 ...

  5. 【算法】剑指 Offer 31. 栈的压入、弹出序列 【重刷】

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

  6. 【LeetCode笔记】剑指 Offer 31. 栈的压入、弹出序列 (Java、栈)

    文章目录 题目描述 代码 && 思路 二刷 题目描述 打卡第三天!加油加油- 数据结构笔试题貌似也会考= =,不过考法不一样,有点规律. 总的来说还是挺有意思的,我们直接来看代码吧- ...

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

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

  8. 剑指Offer之栈的压入、弹出序列

    题目描述 输入两个整数序列,第一个序列表示栈的压入书序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相同.例如1.2.3.4.5是某栈的压入序列,序列5.4.3.2.1是该栈对应的一 ...

  9. 剑指offer:栈的压入、弹出序列

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

最新文章

  1. NPM采用Rust以消除性能瓶颈
  2. 【资讯】这10大科技,将彻底改变你的生活
  3. php mvc 参数传递数组,PHP MVC在帖子上添加到数组
  4. Unity开发《一起来捉妖》教程 | 4.抛掷封妖灵珠
  5. 中秋佳节,献上笔试题一道,祝各位事业蒸蒸日上!
  6. 仓库建设-斜率优化DP
  7. oracle iso,Oracle数据库之Linux操作系统各版本ISO镜像下载(包括oracle linux\redhat\centos\u...
  8. 软件测试的底层逻辑是什么?
  9. web服务器 怎样上传文件,文件上传web服务器
  10. 数据库查询时报IllegalArgumentException异常是什么原因?
  11. php excel扩展名,excel后缀名是什么
  12. 关于固态硬盘SSD的4K对齐
  13. 什么叫机械硬盘_机械硬盘内部是什么结构?
  14. bios中 启动首选项 找不到固态硬盘
  15. 蛋蛋读UFS之三:UFS数据包UPIU
  16. 汽车牌照的排序与查询
  17. telnet远程管理的命令
  18. c语言git代码注释风格,git代码格式化上传
  19. SU草图大师错误合集
  20. Reactive Extensions (Rx) 入门(3) —— Rx的事件编程①

热门文章

  1. you-get使用教程
  2. 怎么设置ie10默认浏览模式为兼容模式
  3. 紫宸激光:FPC排线、LCD模组的激光焊锡解决方案
  4. PS制作咖啡闹钟、故障文字
  5. Praat脚本-009 | 提取时长和基频
  6. [硬件项目] 2、汽车倒车雷达设计——基于专用倒车雷达芯片GM3101的设计方案与采用CX20106A红外线检测芯片方案对比...
  7. 为华生物PCL-NH2 聚己内酯氨基的简介及应用说明
  8. machine learning : 最小二乘法之线性函数 --- python实现
  9. 计算机视觉两个入门数据集(mnist和fashion mnist)本地下载地址
  10. 【软考中级】多媒体应用设计师复习笔记第十章