739. 每日温度

Posted 码上夏雨

tags:

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

每日温度

原题链接😃

每日温度点击链接即可

问题概述😄

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

  • 示例 1:
    输入: temperatures = [73,74,75,71,69,72,76,73]
    输出: [1,1,4,2,1,1,0,0]

  • 示例 2:
    输入: temperatures = [30,40,50,60]
    输出: [1,1,1,0]

  • 示例 3:
    输入: temperatures = [30,60,90]
    输出: [1,1,0]

解答过程😏

对于这个题,我们很容易就有下面的思路:

我们可以依次遍历temperatures数组,用curDay标记,然后从curDay开始依次遍历后面的数组,直到找到第一个气温高的日子lastDay,那么两者之差gapDay
g a p D a y = l a s t D a y − c u r D a y gapDay=lastDay-curDay gapDay=lastDaycurDay
就是我们要找的数值,接着curDay再后移,重复这个过程就能得到结果,于是就有下面的程序

class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& temperatures) {
        vector<int> res; //结果
        //创建队列
        queue<int> myQueue;
        //curDay为当前查找的日子
        int lastDay = 0;
        for (int curDay = 0; curDay < temperatures.size(); curDay++) {
            for (lastDay = curDay; lastDay < temperatures.size(); lastDay++) {
                if(temperatures[lastDay]>temperatures[curDay])
                    break;
            }
            if(lastDay != temperatures.size())
                res.push_back(lastDay-curDay);
            else
                res.push_back(0); //说明遍历到最后都没有比其气温高的
        }
        return res;
    }
};

虽然这种思路简单,但是你很容易超时😅,因为这种做法的复杂度为 O ( n 2 ) O(n^2) O(n2)

如果我们使用单调栈进行优化,便可以得到下列程序

关于单调栈,可以参考文章:
单调栈解题模板秒杀八道题
刷题笔记6(浅谈单调栈)

class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& temperatures) {
        vector<int> res(temperatures.size(),0); //初始化结果数列
        //创建队列
        stack<int> myStack;
        //curDay为当前查找的日子
        int lastDay = 0;
        for (int curDay = 0; curDay < temperatures.size(); curDay++) {
            while (!myStack.empty()&&temperatures[myStack.top()]<temperatures[curDay]){
                res[myStack.top()] = curDay - myStack.top();
                myStack.pop();
            }
            myStack.push(curDay);
        }
        return res;
    }
};

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

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

739. 每日温度

LeetCode:每日温度739

739. 每日温度

Leetcode-739.每日温度(双思路分析)

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