可以参见上一篇文章【数据结构与算法/组合数学】出栈序列的个数问题详解。
经典问题:已知入栈序列是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( ̄▽ ̄)ブ