题目描述
给定一个整数数组 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
思考
使用单调递减栈存储每个温度值的索引,遇到大于栈顶索引对应的温度值就更新栈顶索引的下一个更大温度值天数。
代码
/**
* @param {number[]} temperatures
* @return {number[]}
*/
var dailyTemperatures = function(temperatures) {
const n = temperatures.length;
const ans = Array(n).fill(0);
const stack = []; // 栈内存储「温度的索引」,维持索引对应的温度单调递减
for (let i = 0; i < n; i++) {
// 核心修正:用「索引对应的温度」比较,而非索引本身
while (stack.length && temperatures[i] > temperatures[stack[stack.length - 1]]) {
const prevIndex = stack.pop(); // 弹出待计算的“前一天”索引
ans[prevIndex] = i - prevIndex; // 计算等待天数
}
stack.push(i); // 压入当前天的索引(确保栈内温度单调递减)
}
return ans;
};
1321

被折叠的 条评论
为什么被折叠?



