[AcWing]830. 单调栈 原创

算法标签:单调栈

题目简叙

在这里插入图片描述

思路

单调栈的概念是栈内所有数据都是单调递增或者递减
这里我们只需要构造一个单调递增的栈,然后反复查看栈顶,
此时的栈顶元素必然为栈内最大元素,如果栈顶比目标值大,就弹出该元素,直至栈顶元素比目标值小
这样我们栈内的元素必然是单调递增的

这样我们就可以获得左边第一个比它小的数

代码

#include<iostream>

using namespace std;
const int N = 1e5+10;
int stk[N],tt;

int main(){
    int n;
    cin>>n;
    
    int tmpn=0;
    while(n--){
        cin>>tmpn;
        while(stk[tt]>=tmpn&&tt){
            tt--;
        }  
        cout<<(tt?stk[tt]:-1)<<" ";
        stk[++tt]=tmpn;
    }
    return 0;
}

在这里插入图片描述

#include<iostream>
#include<stack>

using namespace std;

stack<int> stk;

int main(){
    int n;
    cin>>n;
    
    int tmpn=0;
    while(n--){
        cin>>tmpn;
        while (!stk.empty() && stk.top()>=tmpn){
            stk.pop();
        }
        cout<<(!stk.empty()?stk.top():-1)<<" ";
        stk.push(tmpn);
    }
    return 0;
}

在这里插入图片描述

posted @   俺叫西西弗斯  阅读(0)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示