单调栈的用途:用来寻找左边第一个小于当前值的元素
单
调
栈
的
性
质
:
若
栈
中
有
第
i
个
和
第
j
个
元
素
,
且
j
>
i
,
则
在
(
i
,
j
)
范
围
内
的
任
何
数
字
k
必
有
a
[
i
]
<
a
[
j
]
<
a
[
k
]
单调栈的性质:若栈中有第i个和第j个元素,且j>i,则在(i,j)范围内的任何数字k必有a[i]<a[j]<a[k]
单调栈的性质:若栈中有第i个和第j个元素,且j>i,则在(i,j)范围内的任何数字k必有a[i]<a[j]<a[k]
利用这个性质我们就可以寻找左边的第一个元素了。
首
先
看
一
看
栈
顶
,
当
栈
顶
的
值
一
直
小
于
等
于
当
前
元
素
的
时
候
,
就
p
o
p
首先看一看栈顶,当栈顶的值一直小于等于当前元素的时候, 就pop
首先看一看栈顶,当栈顶的值一直小于等于当前元素的时候,就pop
若
停
下
了
,
我
们
假
设
当
前
元
素
的
值
为
v
,
则
有
v
<
t
o
p
.
v
a
l
,
利
用
上
面
的
单
调
栈
的
性
质
,
可
以
很
容
易
的
得
出
它
最
左
边
应
该
是
t
o
p
.
p
o
s
+
1
若停下了,我们假设当前元素的值为v,则有v<top.val,利用上面的单调栈的性质,可以很容易的得出它最左边应该是top.pos+1
若停下了,我们假设当前元素的值为v,则有v<top.val,利用上面的单调栈的性质,可以很容易的得出它最左边应该是top.pos+1
单调栈的性质
最新推荐文章于 2022-05-18 09:39:51 发布