美文网首页
leetcode - 739. 每日温度

leetcode - 739. 每日温度

作者: 恍若如梦hzpeng | 来源:发表于2020-06-11 11:22 被阅读0次

题目

image.png

解法一:

思路:输出的最后一位一定是0,从右往左遍历温度表T,如果当前温度T[i]小于上一次温度T[i + 1],则记录1,否则从上次记录的最大值开始往左遍历,找到最近的比当前值大的温度,记录index

/**
* @param {number[]} T
* @return {number[]}
*/
var dailyTemperatures = function(T) {
   let len = T.length;
   let index = len - 1;
   let max = T[len - 1];
   let dp = new Array(len);
   dp[len - 1] = 0;
   for(let i = len - 2; i >= 0; i--) {
       if (T[i + 1] > T[i]) {
           dp[i] = 1;
       } else {
           if (T[i] >= max) {
               dp[i] = 0;
               max = T[i];
               index = i;
           } else {
               dp[i] = index - i;
               tmpIndex = index;
               while(tmpIndex > i) {
                   if (T[tmpIndex] > T[i]) {
                       dp[i] = tmpIndex - i;
                   }
                   tmpIndex--;
               }
           }
       }
   }
   return dp;
};

解法2:

从左往右遍历温度表,用一个栈来存放温度值与index的信息,如果当前遍历的值小于栈最后的元素值,则把当前元素推入栈内,否则依次把当前值与栈的最后元素对比,如果当前值大于栈的最后一位元素值,则栈推出最后一位,并记录该位置的距离i - item.index,直到栈的最后一位元素值大于等于当前遍历值,才把当前值放入栈中。最后不要忘了把res中为空的元素替换成0

/**
 * @param {number[]} T
 * @return {number[]}
 */
var dailyTemperatures = function(T) {
    let stack = [{val: T[0], index: 0}];
    let res = new Array(T.length);
    for (let i = 1; i < T.length; i++) {
        if (T[i] > stack[stack.length - 1].val) {
            let flag = true;
            while(flag) {
                if (stack.length > 0 && stack[stack.length - 1].val < T[i]) {
                    let item = stack.pop();
                    res[item.index] = i - item.index;
                } else {
                    stack.push({val: T[i], index: i})
                    flag = false;
                }
            }
        } else {
            stack.push({val: T[i], index: i})
        }
    };
    for (let i = 0; i < res.length; i++) {
        if (res[i] === undefined) {
            res[i] = 0;
        }
    }
    return res;
};

相关文章

  • 739. 每日温度

    739. 每日温度[https://leetcode.cn/problems/daily-temperatures...

  • LeetCode 739. 每日温度 | Python

    739. 每日温度 题目来源:力扣(LeetCode)https://leetcode-cn.com/proble...

  • 739. 每日温度

    739. 每日温度[https://leetcode-cn.com/problems/daily-temperat...

  • 739. 每日温度

    739. 每日温度[https://leetcode-cn.com/problems/daily-temperat...

  • 题739

    739. 每日温度[https://leetcode-cn.com/problems/daily-temperat...

  • leetcode - 739. 每日温度

    题目 解法一: 思路:输出的最后一位一定是0,从右往左遍历温度表T,如果当前温度T[i]小于上一次温度T[i + ...

  • LeetCode 739. 每日温度

    题目 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answe...

  • LeetCode-python 739.每日温度

    题目链接难度:中等 类型: 根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待...

  • 739. 每日温度/46. 全排列

    739. 每日温度 相关标签 : 哈希表 栈 46. 全排列 相关标签: 回溯算法

  • LeetCode每日一题: 739. 每日温度

    739. 每日温度 根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日...

网友评论

      本文标题:leetcode - 739. 每日温度

      本文链接:https://www.haomeiwen.com/subject/kenvtktx.html