基础算法复习——单调栈
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础算法复习——单调栈相关的知识,希望对你有一定的参考价值。
单调栈:
单调栈非常容易理解,因为栈只能从一个方向进出。
单调栈的作用主要是可以找到一个数左边或右边第一个比它大或比它小的数。
下面以找出一个数左边第一个比它大的数为例。
举一列数:3,7,4,9,2,1
从左向右进行循环,(注意:入栈的是数组下标。在第一个元素入栈之前先把0入栈,在这里把a[0]的值设为无穷大)
对a[1],3比无穷大小,所以ans[1]=0,1入栈。
对a[2],7比3大,3出栈,所以ans[2]=0,2入栈
......
以此类推
Code:
1 for (int i=1; i<=n; i++) 2 { 3 while (a[s.top()]<=a[i]) s1.pop(); 4 ans[i]=s1.top(); //向前看第一个大于它。 5 s1.push(i); 6 }
以上是关于基础算法复习——单调栈的主要内容,如果未能解决你的问题,请参考以下文章
《算法竞赛进阶指南》0x11栈 单调栈求矩形面积 POJ2559