基础算法复习——单调栈

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     }
View Code

 

以上是关于基础算法复习——单调栈的主要内容,如果未能解决你的问题,请参考以下文章

单调队列单调栈

AcWing基础算法课Level-2 第二讲 数据结构

单调栈算法 入门+博客推荐+模板

《算法竞赛进阶指南》0x11栈 单调栈求矩形面积 POJ2559

算法学习——剑指 Offer II 039. 直方图最大矩形面积(Java实现蛮力,分治,单调栈)

算法学习——剑指 Offer II 039. 直方图最大矩形面积(Java实现蛮力,分治,单调栈)