每日温度(单调栈)

题目链接: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;
    }
};
posted @ 2025-01-10 20:22  Marinaco  阅读(27)  评论(0)    收藏  举报
//雪花飘落效果