739. Daily Temperatures. 单调栈

根据每日 气温 列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。

例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。

提示:气温 列表长度的范围是 [1, 30000]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/daily-temperatures

单调递减栈,每个入栈元素与栈顶元素比较,温度若比他大则入栈,温度若比他小,则下标之差为所需的返回数据。

class Solution {
public:
    
    struct Node{
        int index;
        int val;
    };

    vector dailyTemperatures(vector& T) {

        vector  a;
        vector  ret(T.size());
        stack  st;
        
        for (int i = 0; i < T.size(); i++){
            a.push_back(Node{i,T[i]});
        }

        for (auto elem : a){
            while (!st.empty() && st.top().val < elem.val){
                int diff = elem.index - st.top().index;
                ret[st.top().index] = diff;
                st.pop();
            }
            st.push(elem);
        }

        while (!st.empty()){
            ret[st.top().index] = 0;
            st.pop();
        }

        return ret;
        
    }
};

你可能感兴趣的:(739. Daily Temperatures. 单调栈)