单调栈
单调栈
思想
假设要找数组中每个数左边最近的比他小的数,如:1 3 2 4
将每一个比当前要小的数存入栈中;
1没有 3是1,当遍历到2时,我们已经将13存入栈中,此时弹出3,1就是我们要找的数,之后把2再加入到栈中
为什么要弹出3,因为2比3要小,后面的数往前遍历只需要遍历到2就结束了
常用来解决找左右两边离他最近的比它大或者小的数
代码模板
//常见模型:找出每个数左边离它最近的比它大/小的数
int tt = 0;
for (int i = 1; i <= n; i ++ )
{
while (tt && check(stk[tt], i)) tt -- ;
stk[ ++ tt] = i;
}