TWF

单调栈

单调栈

思想

假设要找数组中每个数左边最近的比他小的数,如: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;
}
posted @ 2022-09-24 00:25  fsh001  阅读(13)  评论(0编辑  收藏  举报