单调栈解法
这是这道题最常用的解法,利用栈来帮助追踪温度变化。
算法思路:
- 使用栈存储温度的下标。当遇到比栈顶温度高的元素时,弹出栈顶,计算两个下标的差值即为等待的天数。
- 栈内保持从栈底到栈顶递减的顺序。
var dailyTemperatures = function (temperatures) {
let stack = []
let res = new Array(temperatures.length).fill(0)
for (let i = 0; i < temperatures.length; ++i) {
// 循环将stack容量减少
while (stack.length > 0 && temperatures[i] > temperatures[stack[stack.length - 1]]) {
let idx = stack.pop()
res[idx] = i - idx
}
stack.push(i)
}
return res
};