【数据结构与算法】关于合理的出栈顺序问题

可以参见上一篇文章【数据结构与算法/组合数学】出栈序列的个数问题详解

经典问题:已知入栈序列是12345,问下面那个出栈顺序是不合理的?
A. 54321
B. 45321
C. 43512
D. 12345

这种问题往往让人十分头疼,好像得挨个模拟一遍入栈过程。有没有更简便的方法呢?

事实上,我们有
定理 对于入栈序列123...n,若出栈序列中每个元素后面比它小的元素都是逆序排列的,那么这个序列就是合法的出栈序列。

意思就是说,对于出栈序列的一个元素,考察在它后面并且比他小的元素,这些元素组成的序列必须是逆序的。

证明:根据栈的先进后出特性,对于一个数 a a a,如果数 b b b a a a先入栈,则必须比 a a a后出栈。把这条规则应用到所有比 a a a小的数即可。

因此,对于这个问题,我们观察到C选项5后面比5小的数1,2是顺序排列的,C不是合法的出栈序列。

这就是解决出栈顺序十分合理的问题的简便方法了,还是蛮实用的。你学会了吗o( ̄▽ ̄)ブ

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值