【单调栈】-每日温度[mid]

题目

  1. 每日温度

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指在第 i 天之后,才会有更高的温度。如果气温在这之后都不会升高,请在该位置用 0 来代替。

思路

单调栈的思路
逆向寻找下一个更大的元素,保存好下标索引,对应的位置直接相减!

代码

class Solution:
    def dailyTemperatures(self, t: List[int]) -> List[int]:
        n = len(t)
        st = []
        cnt = 1
        res = [0]*n
        for i in range(n-1,-1,-1):
            v =t[i]
            while st and t[st[-1]]<=v:
                st.pop()
            if st:
                pre = st[-1]
                res[i] = pre-i
            st.append(i)
        return res

class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& t) {
        int n = t.size();
        vector<int> res(n,0);
        stack<int> st;
        int pre = 0;
        for(int i = n-1;i>=0;--i)
        {
            while (!st.empty() && t[st.top()]<=t[i])
            {
                st.pop();
            }
            if (!st.empty())
            {
                pre = st.top();
                res[i] = pre - i;
            }
            st.push(i);
        }
        for(int i=0;i<n;i++)
        {
            cout<<res[i]<<endl;
        }
        return res;
    }
};
posted @   jucw  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示
主题色彩