#include<stdio.h>
#include<stack>
using namespace std;
/**单调栈: 递增 入栈时栈顶元素必须大于将要入栈元素,
否则栈顶元素出栈
测试*/
/**查找下一个比当前元素大的元素*/
/**
根据每日气温列表,请重新生成一个列表,
对应位置的数值是你需要再等待的天数,
经过这些天数后温度才会超过该日温度。
如果温度之后都不会再升高,
则该位置对应的数值为 0 。
例如,给定一个列表
temperatures = [73, 74, 75, 71, 69, 72, 76, 73],
你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。
*/
int main()
{
stack<int>s;
int n;
int a[100];
int ans[100];
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
ans[i]=0;
}
for(int i=0;i<n;i++)
{
while(!s.empty()&&a[i]>=a[s.top()])
{
ans[s.top()]=i-s.top();
s.pop();
}
s.push(i);
}
for(int i=0;i<n;i++)
printf("%d ",ans[i]);
return 0;
}
单调栈
最新推荐文章于 2023-10-06 19:25:50 发布