单调栈问题
作者:互联网
单调栈
单调递增栈:栈中元素从栈底到栈顶是递增的。
单调递减栈:栈中元素从栈底到栈顶是递减的。
应用:求解下一个大于x元素或者是小于x元素的位置。
给一个数组,返回一个大小相同的数组,返回的数组的第i个位置的值应当是,对于原数组中的第i个元素,至少往右走多少步,才能遇到一个比自己大的元素。
(如果之后没有比自己大的元素,或者已经是最后一个元素,则在返回数组的对应位置放上-1)
#include<bits/stdc++.h>
using namespace std;
const int N = 1e4;
stack<int>s;
int num[N];
int res[N];//res是result的缩写
void nextGreater(int a[],int n)
{
for(int i = n - 1; i >= 0; i--)
{
//倒序检索,当栈中元素非空或者检索元素大于栈顶元素
while(!s.empty() && s.top() <= a[i])
s.pop();
res[i] = s.empty()? -1 : s.top();
s.push(a[i]);
}
}
int main()
{
int n;
scanf("%d",&n);
for(int i = 0; i < n; i++)
scanf("%d",&num[i]);
nextGreater(num,n);
for(int i = 0; i < n; i++)
printf("%d ",res[i]);
return 0;
}
输出结果:
标签:int,元素,栈底,问题,数组,栈中,单调 来源: https://blog.csdn.net/EDGNB6666/article/details/122784579