算法列表

739.每日温度 中等

布莱克2026-03-05 23:25

问题:

给定一个整数数组 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;
};


assistant