【单调栈】-每日温度[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 @ 2022-05-25 18:58  jucw  阅读(31)  评论(0编辑  收藏  举报