本文纯属个人见解,是对前面学习的总结,如有描述不正确的地方还请高手指正~

在技巧笔试口试上,我们常常会碰到这样一类题型,如给你一个入栈序列,然后再让你判断几个序列是否有可能为它的出栈序列,如:

入栈序列为 1 2 3 4 5,则 1 2 3 4 5可能为它的出栈序列,而 5 4 1 2 3弗成能为它的出栈序列。

对于n比较小的情况,我们往往可以通过手动模拟的方法来判断,对于n比较大的时候,这种方法就显得效率不佳了。

下面分析一种通用的方法判断正当出栈序列,时间复杂度为O(n)。为了叙说便利,我们不妨设入栈序列为 1 2 3.......n,并且每一个元素各不相等。

事实上,一个出栈序列固定的话,那么没个数的出栈顺序和时间都是固定的,则我们可以模拟栈的入栈出栈过程,来判断是否一个正当的出栈序列。

我们首先设po为目前为止入栈的元素中最大的数,初始化为0,若下一个出栈元素要大于po的话(设为x),说明我必须将[po+1,x]中的全部书都入栈,再将x弹出便可(这时还应把po赋值为x)。否则说明下一个出栈的元素已经在栈中,并且肯定是栈顶元素,若栈顶元素与下一个出栈元素不相等的话,我们可以判断这不是一个正当出栈序列,否则,若全部的出栈元素都不引起冲突,则说明这是一个正当序列。这里再说一下时间复杂度,因为我们只有在下一个出栈元素大于po时,才将元素压入栈中,并且我们每一次判断一个出栈元素是否发生冲突时,都会将栈顶元素弹出,所以每一个元素都入栈一次,出栈一次,所以时间复杂度为O(n)。

每日一道理
灯,带有一种明亮的光,每当深夜来临,是它陪伴着你,如此默默无闻。它是平凡的,外表华丽与否,那都是一样的,珍珠点缀,水晶加饰的灯它只能用以装饰,来满足人们的虚荣心,比起这,普普通通的日光灯是幸运的,因为它照明的本性没有改变,如同生活中的一部分人平平凡凡却实实在在。

算法的具体实现请看代码。

代码如下:

#include <stdio.h>
#define maxn 1005
int stack[maxn],top;
int out[maxn];
int check(int n)
{int po=0;for(int i=1;i<=n;i++){for(int j=po+1;j<=out[i];j++){po=j;stack[top++]=j;}if(stack[--top]!=out[i])return 0;}return 1;
}
int main()
{int n;scanf("%d",&n);//假设入栈序列为1 2。。。。nfor(int i=1;i<=n;i++){scanf("%d",&out[i]);}if(check(n))printf("Yes\n");elseprintf("No\n");return 0;
}

文章结束给大家分享下程序员的一些笑话语录: 3G普不普及现在已经不是看终端了,而是看应用,有好的,便宜实用的应用,花1000多买个能用的智能手机应该不是什么难事。反过来说,你200元拿一个智能手机,没有好的应用,看个电影要几十元,也是没人用3G。

转载于:https://www.cnblogs.com/xinyuyuanm/archive/2013/05/12/3074810.html

序列元素IT面试题——判断合法出栈序列相关推荐

  1. 栈 - 关于出栈序列,判断合法的出栈序列

    文章目录 1 引例 2 做题方法 3 原因 3.1 选项D(4 3 1 2)的模拟 1 引例 (例)设栈的入栈序列是 1 2 3 4,则下列不可能是其出栈序列的是( ). A. 1 2 4 3 B. ...

  2. 数据结构:判断堆栈出栈序列是否有效

    描述:如果以序列"1,2,3,4"作为一个栈(初始为空)的输入,那么可得到输出序列"1,2,3,4"或"4,3,2,1"或"2,3 ...

  3. xdoj判断堆栈出栈序列是否有效c++

    我在leetcode上写过类似的题,这个代码在xdoj上只能得***50***分,跪求各位大佬挑挑毛病. #include<stack> #include<iostream> ...

  4. 详解+G - 数据结构实验之栈与队列七:出栈序列判定

    理解: 出入栈规律之一,如果前面有一个比较大的数,后面有连续的递增顺序,递增顺序>=2个小于前面比较大的数,那么此出栈顺序不可能实现.比如4,1,2,3,5. 思路:输入一个数,然后不断按照顺序 ...

  5. 给定入栈序列,判断出栈序列是否合法

    题目:分别给定入栈序列和出栈序列,然后判断出栈序列是否合法.如入栈序列是[1,3,2,4,5],出栈序列[3,1,2,4,5]是合法的,[3,1,5,2,4]是不合法的. 思路: 判断出栈序列是否合法 ...

  6. 车厢调度(判断是否为合法的出栈序列)

    时间限制: 1 Sec 内存限制: 128 MB [提交] [状态] 题目描述 有一个火车站,铁路如图所示,每辆火车从A驶入,再从B方向驶出,同时它的车厢可以重新组合.假设从A方向驶来的火车有n节(n ...

  7. PAT甲级1051 Pop Sequence:[C++题解]模拟栈、判断序列是否是合法的出栈序列

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: 题意:将1~N压栈,判断给定序列是否是合法的出栈序列. 对于序列1~N中的每个值i,先将其压入栈.然后对于它就有两种处理方法:要么压 ...

  8. 判断出栈序列合法性(c语言)

    判断出栈序列合法性 描述 格式 样例 题解及注释 描述 有1.2.3.4.5.6.7这7个数字依次全部入栈后再出栈,在入栈的过程中栈中的数据也可以随时出栈,一直到整个栈为空.将出栈得到的数字依次排列, ...

  9. 给定入栈序列,判断一个串是否为出栈序列

    剑指offer22:给定入栈序列,判断一个串是否为出栈序列 public static boolean isOutStackSequence(int[] Spush, int[] Spop) {if ...

最新文章

  1. Pytorch:使用DCGAN实现数据复制
  2. 【AI白身境】深度学习必备图像基础
  3. unity创建一个简单对象的开销_Unity下简单对象池的创建与使用
  4. 约瑟夫问题的学习(基于循环链表)以及基于循环数组
  5. CodeForces - 125C Hobbits' Party(思维+构造)
  6. C#LeetCode刷题之#463-岛屿的周长​​​​​​​(Island Perimeter)
  7. 定速巡航和自适应定速巡航有什么区别,开关分别是什么样的?
  8. 上海计算机三级网络,上海市计算机三级网络技术
  9. c语言必背代码百度云,c语言初学必背代码.docx
  10. [OpenCV+VS2015]火焰检测算法(RGB判据)
  11. 解决: error: Class declaration lacks Q_OBJECT macro. 的报错
  12. 计算机毕业设计Java校友闲置书籍管理平台(源码+系统+mysql数据库+Lw文档)
  13. PMI与股市同期走势图
  14. 回炉重造之JAVA---枚举
  15. 几百字道尽华夏无千年。
  16. 程序员做外包有前途吗?谈谈外包的利与弊,字字扎心
  17. Halting Problem图灵机问题
  18. 吸顶那个叫什么_吸顶空调吊顶区别到底是什么
  19. 计算机科学版面费,《计算机科学》版面费
  20. HEC-RAS和HEC-HMS水文模型应用、《防洪评价报告编制导则解读河道管理范围内建设项目编制导则》(SL/T808- 2021)下防洪评价报告编制方法及洪水建模

热门文章

  1. 深度学习导论(6)误差计算
  2. c语言自动按键脚本,C语言键盘控制走迷宫小游戏
  3. CF思维联系--CodeForces -214C (拓扑排序+思维+贪心)
  4. 图论--拓扑排序--判断一个图能否被拓扑排序
  5. Perl获取当前系统时间
  6. 一些机器学习数据集(Dataset)
  7. C语言高级编程:数组和结构体初始化为0的方法
  8. DCASE 2013任务1(声学场景分类)参赛作品相关信息
  9. python获取包下的所有对象_Python访问COM对象的comtypes包简介
  10. aws mysql价格_mysql – AWS RDS“转出”成本有多贵?