单调栈——每日温度

Posted vector6_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单调栈——每日温度相关的知识,希望对你有一定的参考价值。

每日温度

请根据每日 气温 列表 temperatures ,请计算在每一天需要等几天才会有更高的温度。如果气温在这之后都不会升高,请在该位置用 0 来代替。

示例 1:

输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]
class Solution 
public:
    vector<int> dailyTemperatures(vector<int>& temperatures) 
        int n = temperatures.size();
        vector<int> res(n, 0);
        std::stack<int> st;
        for(int i = temperatures.size()-1; i>=0; --i)
        
            while(!st.empty() && temperatures[st.top()]<=temperatures[i])
            
                st.pop();
            
            res[i] = st.empty()?0:st.top()-i;
            st.push(i);
        
        return res;
    
;

当题目出现「找到最近一个比其大的元素」的字眼时,自然会想到「单调栈」。使用单调栈,逆向遍历,这里保存的值为索引而不是元素值。最终的结果数组需要计算栈顶索引与当前索引的距离。(遍历整个数组,如果栈不空,且当前数字大于栈顶元素,那么如果直接入栈的话就不是 递减栈 ,所以需要取出栈顶元素,由于当前数字大于栈顶元素的数字,而且一定是第一个大于栈顶元素的数,直接求出下标差就是二者的距离。)

以上是关于单调栈——每日温度的主要内容,如果未能解决你的问题,请参考以下文章

单调栈——每日温度

739. 每日温度 : 单调栈模板题

leetcode - 739每日温度 - 单调栈

Java 求解每日测温

Java每日一题——>739. 每日温度(蛮力法,栈方法)

Java每日一题——>739. 每日温度(蛮力法,栈方法)