题目链接:https://leetcode.cn/problems/daily-temperatures/
题意:
给你一个每日气温数组,请你确定每个位置右边是否比自己大的元素,如果无,返回0。否则,返回两者下标之差
思路:
单调栈(这就好似给了数组中每个位置做波峰或波谷的机会)(ps:单调栈一定存的是下标i)
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
int st[100005];
int n=temperatures.size();
vector<int>ans(n);
int r=0,cur;
for(int i=0;i<n;i++)
{
while(r>0&&temperatures[st[r-1]]<=temperatures[i])
{
cur = st[--r];
ans[cur]=i;
}
st[r++]=i;
}
while(r>0)
{
ans[st[--r]]=0;
}
for(int i=n-2;i>=0;i--)
{
if(ans[i]!=0&&temperatures[ans[i]]==temperatures[i])
{
ans[i]=ans[ans[i]];
}
}
for(int i=0;i<n;i++)
{
if(ans[i])ans[i]=ans[i]-i;
}
return ans;
}
};
标签:int,每日,st,temperatures,&&,ans,单调,温度
From: https://www.cnblogs.com/benscode/p/18664657