快速判断一个数列是否是合法的出栈顺序

背景

做笔试题目的时候,发现有一些试卷有给定一个进栈序列让你判断下列哪个是合法/不合法的出栈序列。
通常进栈的序列不是升序如{1,2,3,4,5,6}就是{6,5,4,3,2,1},当然其他的我好像就没有看到了,如果遇到了其他的情况会及时更新在这篇博客中的。

快速判断方法

第一个问题

Problem 1:有六个元素{6,5,4,3,2,1},按照该顺序入栈,那么以下哪一个是不合法的出栈顺序().
A) 543612
B) 453126
C) 346521
D) 234156

发现入栈的顺序是降序排列,由于栈是FILO,所以快速判断的依据就是任意数A的后面比A大的数都是按照升序排列的

  • A中5后面比5大的是6,升序;4后面比4大的是6,升序;3后面比3大的是6,升序;以此类推,所以A合法。
  • B中4后面比4大的是5和6,是升序的;以此类推,B合法。
  • C中3后面比3大的是4,5和6,然而可以发现465并不是升序排列,所以这个不合法。
  • D中同理,2后面的3456是升序,其他的也可以验证,所以也是合法的。

第二个问题

Problem 2:有六个元素{1,2,3,4,5,6},按照该顺序入栈,那么543216和542136哪个是合法的出栈序列?

发现入栈顺序是升序排列,同样由于FILO,所以快速判断的依据就是任意数A后面比A小的数都是按照降序排列的

  • 543216中,5后面比5小的有4321,在543216中的确是按照降序的,其他的位也能以此判断,所以543216是合法的;
  • 542136中,4后面比5小的有4321,但是4213这个并不是降序排列,所以是不合法的。

总结

  1. 栈的FILO特性的理解
  2. 从入栈顺序的特点出发,结合FILO判断出栈的顺序
  3. 死记硬背不可取,多理解
  4. 这只是快速做选择题和判断题,代码题可能需要思考一下应该用什么数据结构和算法来实现了
  • 29
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值