给定一个整数数组 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]
思路:
因为结果数组是更高温度在几天后,所以更多关注的是位置索引
创建一个栈,栈中存放温度索引,而非值,并且保证栈底存放出现的最高温度索引
遍历温度,遍历栈中元素,如果当前温度大于栈顶部的温度,顶部出栈,当前天索引-出栈的索引,放在对应的结果数组中,当前温度索引入栈
var dailyTemperatures = function(temperatures) {
let len = temperatures.length;
let arr = new Array(len).fill(0);
//维护一个单调栈,存放索引值
let stack = [];
for (let i = 0; i < len; i++) {
while (stack.length && temperatures[i] > temperatures[stack[stack.length - 1]]) {
let top = stack.pop();
arr[top] = i - top;
}
stack.push(i)
}
return arr;
};