JS 算法分享——[LeetCode]每日高温

278 阅读1分钟

题目: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);