zoukankan      html  css  js  c++  java
  • 739. Daily Temperatures

    一、题目

      1、审题

      

      2、分析

        给出一个记录温度的数组。输出当前温度距离下一次升温的下标距离。

    二、解答

      方法一、

        采用一个 dp 数组,从后往前填值。(i < j)

        若 dp[i] < dp[j], 则 dp[i] = j - i;

        若 dp[i[ >= dp[j] 则 j = j + dp[j]

        public int[] dailyTemperatures(int[] T) {
            
            int[] dp = new int[T.length];
            for (int i = T.length - 2; i >= 0; i--) {
                for (int j = i + 1; j < dp.length;) {
                    if(T[i] < T[j]) {
                        dp[i] = j - i;
                        break;
                    }
                    else {
                        if(dp[j] == 0)
                            break;
                        j = j + dp[j];
                    }
                }
            }
            return dp;
        }

      方法二、

        采用一个栈来计算下一次的升温距离。从前向后遍历:

        

        public int[] dailyTemperatures2(int[] T) {
            Stack<Integer> stack = new Stack<>();
            int[] ret = new int[T.length];
            for (int i = 0; i < ret.length; i++) {
                while(!stack.isEmpty() && T[i] > T[stack.peek()]) {
                    int idx = stack.pop();
                    ret[idx] = i - idx;
                }
                stack.push(i);
            }
            return ret;
        }
  • 相关阅读:
    第六周进度条
    团队开发需求分析视频连接
    敏捷开发综述
    数组2--数组首尾相接,求最大子数组
    数组1--求一个数的最大子数组
    第四周进度条
    四则运算3
    第三周进度条
    第二周进度条
    单元测试
  • 原文地址:https://www.cnblogs.com/skillking/p/10929323.html
Copyright © 2011-2022 走看看