题目:739. 每日温度
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。
示例一;
输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]
示例二;
输入: temperatures = [30,40,50,60]
输出:输出: [1,1,1,0]
示例三;
输入: temperatures = [30,60,90]
输出: [1,1,0]
本题来源于leetcode
解题思路
思路: 维护一个栈,遍历数组,当栈不为空且当前元素值大于栈顶元素时,则必定是栈顶元素的下一个最高温,求出两者下标差即可
代码实现:
var dailyTemperatures = function (temperatures) {
let stack = [];
// 初始化气温列表,默认值为0
let res = new Array(temperatures.length).fill(0);
for (let i = 0; i < temperatures.length; i++) {
//将栈顶元素下标对应的值和当前元素进行比较
while (temperatures[i] > temperatures[stack[stack.length - 1]] && stack.length) {
// 将找到下一个最高温的元素出栈,并将下标差值存入结果数组中
let idx = stack.pop();
res[idx] = i - idx;
}
stack.push(i);
}
return res;
};
let res = dailyTemperatures([55, 38, 53, 81, 61, 93, 97, 32, 43, 78]);
console.log(res);