[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;
}
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端