可以参见上一篇文章【数据结构与算法/组合数学】出栈序列的个数问题详解。
经典问题:已知入栈序列是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( ̄▽ ̄)ブ
本文讲解了一个巧妙的方法来快速判断给定的出栈序列是否合理,利用逆序排列定理,避免了逐一模拟。通过实例C选项说明了如何应用这一原理。掌握这个技巧,轻松解决入栈序列123...n的出栈问题。
567





