美文网首页
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;
    };
    

    相关文章

      网友评论

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

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