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

压栈序列为1、2、3、4、5,弹出序列4、5、3、2、1对应的压栈和弹出过程

一个压入顺序为1、2、3、4、5的栈没有一个弹出序列为4、3、5、1、2

规律:
如果下一个弹出的数字刚好是栈顶数字,那么直接弹出。如果下一个弹出的数字不在栈顶,我们把压栈序列中还没有入栈的数字压入辅助栈,直到把下一个需要弹出的数字压入栈顶为止。如果所有的数字都压入栈了仍然没有找到下一个弹出的数字,那么该序列不可能是一个弹出序列。

代码如下:

#include <iostream>
#include <stack>
using namespace std;bool IsPopOrder(const int *pPush, const int *pPop, int nLength)
{bool bPossible = false;if (pPush != nullptr && pPop != nullptr && nLength > 0){const int *pNextPush = pPush;const int *pNextPop = pPop;stack<int>stackDate;while (pNextPop - pPop < nLength){while (stackDate.empty() || stackDate.top() != *pNextPop){if (pNextPush - pPush == nLength) break;stackDate.push(*pNextPush);pNextPush++;}if (stackDate.top() != *pNextPop) break;stackDate.pop();pNextPop++;}if (stackDate.empty() && pNextPop - pPop == nLength) bPossible = true;}return bPossible;
}

测试用例:
● 功能测试(输入的两个数组含有多个数字或者只有 1 个数字,第二个数组是或者不是第一个数组表示的压入序列对应的栈的弹出序列)。
● 特殊输入测试(输入两个NULL指针)。
本题考点:
● 考查分析复杂问题的能力。刚听到这个面试题的时候,很多人可能都没有思路。这个时候,可以通过举一两个例子,一步步分析压栈、弹出的过程,从中找出规律。
● 考查应聘者对栈的理解。

[剑指offer]面试题22:栈的压入、弹出序列相关推荐

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

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

  2. 剑指offer面试题[22]-栈的压入、弹出序列

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

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

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

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

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

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

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

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

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

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

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

  8. python 栈的压入弹出序列

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

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

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

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

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

最新文章

  1. 多任务学习,如何设计一个更好的参数共享机制?| AAAI 2020
  2. 如何遍历JavaScript对象?
  3. 大话数据库连接池简史,你都用过几个?
  4. python的类与模块_Python类与模块属性
  5. C++Bubble sort冒泡排序的实现算法(附完整源码)
  6. 奇安信cdn配置教程_PicGo+jsDelivr+GitHub搭建免费cdn加速的图床
  7. git -- 练习的笔记
  8. 提升面对电脑的工作效率
  9. C语言学习笔记---结构体数组初始化
  10. TensorFlow 2.0开发者测试版来啦,正式版推出指日可待
  11. 【2020模拟考试T2】【PAT乙】1032 挖掘机技术哪家强 (20分) 模拟,STL
  12. 08_实现用户邮箱激活
  13. c语言智能车跑道检测程序,基于金属检测的智能循迹小车设计
  14. Trime同文输入法
  15. latex 中表格怎么指定编号_有没有大侠知道怎么改latex模板里的表格标题设置呢?就是把表格编号和标题名称改到一行。。...
  16. POI文件上传及使用详解
  17. CoreAudioApi-音频端点设备-检测耳机插拔
  18. c语言压力变送器程序设计,智能温度变送器信号处理软件算法与软件设计
  19. 扬名立万影评爬取与分析
  20. dllexport和dllimport

热门文章

  1. 【计算机图形学】实验:VB.net环境下的综合绘图与交互技术案例教程
  2. C#服务器编程:WebService、Ajax与回调函数(一)
  3. Android插件化开发之动态加载基础之ClassLoader工作机制
  4. realloc函数使用总结
  5. Android之退出应用关闭项目每个Activity的总结
  6. 【C语言简单说】二:第一个C语言程序详解(3)
  7. spss练习数据_读硕博,为你推荐5本最实用的SPSS数据统计书
  8. 每日一笑 | 终于知道为什么胖了之后气质会垮了
  9. 【干货】通俗理解神经网络中激活函数作用
  10. php 身份认证服务,PHP的HTTP身份认证