一、单调栈
1、什么是单调栈?
单调栈是指一个栈内部元素具有严格单调性(单调递增, 单调递减)的一种数据结构。
2、单调栈的两个性质:
- 满足从
栈顶
到栈底具有严格
的单调性 - 满足后进先出的特征, 越靠近栈底的元素越早的进栈。
3、元素进栈的过程:
对于当前进栈元素x
①如果x < 栈顶元素, x 进栈。
②否则 栈顶元素出栈, 直到 到 栈顶元素 < x(且栈不为空); x进栈。
举个例子:
1, 7, 3, 5;
开始1, 进入栈, 栈内元素(从栈顶开始){1}
到7, 7> 栈顶元素1.所以1出栈 { },此时 栈为空, 所以7可以入栈, {7}
然后3 < 7 , 3入栈 {7,3}
然后5> 栈顶3 所以,3出栈 {7}, 5 < 栈顶元素7 所以 5入栈{5, 7}
4、模拟实现
int x;
stack<int>s;
for(int i = 1;i <= N;i++)
{
if(x < s.top)s.push(x);
else
{
while(!s.empty()&&x >= s.top())
{
s.pop();
}
s.push(x);
}
}