739. 每日温度
给定一个整数数组 temperatures
,表示每天的温度,返回一个数组 answer
,其中 answer[i]
是指对于第 i
天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 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]
提示:
1 <= temperatures.length <= 105
30 <= temperatures[i] <= 100
解题思路
单调栈
- 定义两个栈,
- 一个,用于存储temperatures元素信息
- 一个,用于返回结果。
- 进行temperatures数组遍历
- 当前temperature数值与栈顶元素进行比较
- 若
当前temperature数值
>栈顶元素数值
- 将当前temperature信息(包括数值与坐标)推入栈中
- 若
当前temperature数值
<栈顶元素数值
- 求出当前坐标差,推入结果数组
answer
中。 - 再将栈顶推出
- 求出当前坐标差,推入结果数组
- 若
- 当前temperature数值与栈顶元素进行比较
- 返回结果数组。
代码实现
(以数组存储信息到栈中,坐标0:数值,坐标1:temperatures数组坐标)
var dailyTemperatures = function(temperatures) {
const answer=new Array(temperatures.length).fill(0);
const stack=[];
for(let index=0;index<temperatures.length;index++){
while(stack.length>0 && stack[stack.length-1][0]<temperatures[index]){
answer[stack[stack.length-1][1]]=index-stack[stack.length-1][1];
stack.pop();
}
stack.push([temperatures[index],index]);
}
return answer;
};