单调栈

来源:互联网 发布:美工修图多少钱一张 编辑:程序博客网 时间:2024/05/29 18:33

求比元素两边小的数

如序列:3 2 4 1 5 7


元素 左边 右边

3  无   2

2  无   1

4  2   1

1  无   无

5  1   无

7  5   无



解法:

维护一个栈,栈内元素递增


首先3进栈

再2准备进栈,但此时栈内元素不是递增,3先出栈。

因此2是3右边最近的比3小的元素。 

同时3出栈,3出栈后,top为空。因此3左边最近的比3小的元素不存在。   因此  3   2;


2进栈后,4准备进栈。

此时满足递增。继续下一个元素1准备进栈。

1小于栈顶元素4。因此4出栈。同时1是4右边最近最小的元素。

4出栈后,top为2。因此4左边最近的比4校的元素是2。因此 4 21;


总结:

元素按顺序准备进栈。

若栈顶元素大于准备进栈的元素a,则栈顶元素b弹出,并且b的右边最近小的元素是a。b左边最近最小的元素是b出栈后栈顶元素c。