题目链接: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;}
};