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=lastDay−curDay
就是我们要找的数值,接着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. 每日温度的主要内容,如果未能解决你的问题,请参考以下文章