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;
    }

 

posted @ 2019-05-27 10:26  skillking2  阅读(113)  评论(0编辑  收藏  举报