对于在出栈序列中任意元素,其之后值小于该元素的元素必须是降序排列,否则序列不可能。
原因剖析如下:
1.所有元素都是从小到大顺序进栈, 所以栈顶元素一定比栈中的其他元素(如果有的话)大;
2.根据"后进先出"的原则, 在出栈序列中, 曾经同一时刻存在于栈的元素, 值最大的栈顶元素会排在其他元素的前面;
3.栈中的每一个元素都有机会成为栈顶元素;
综合以上三点, 就是一个类似于降序的选择排序过程(每次都挑选最大的元素放在最前面), 使得
曾经同一时刻存在于栈的元素按照降序排列, 即每一个元素后值比该元素小的元素都呈降序排列
)
另注: 对于任一个元素后面的值比该元素大的元素, 它们既可以是升序(进栈后立即出栈), 也可以是降序(进栈后都等待比它更大的元素进栈) , 因此不能作为判断依据.
栈序列
|
出栈序列
(
输出序列
)
| ||
栈顶
|
栈底
|
先
|
后
|
1
| |||
1
| |||
2
|
1
| ||
32
|
1
| ||
432
|
1
| ||
5432
|
1
| ||
432
|
15
| ||
32
|
154
| ||
2
|
1543
| ||
15432
|