739. Daily Temperatures

1、題目數組

  一、審題spa

  

  二、分析code

    給出一個記錄溫度的數組。輸出當前溫度距離下一次升溫的下標距離。blog

 

2、解答class

  方法1、遍歷

    採用一個 dp 數組,從後往前填值。(i < j)方法

    若 dp[i] < dp[j], 則 dp[i] = j - i;im

    若 dp[i[ >= dp[j] 則 j = j + dp[j]img

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

 

  方法2、di

    採用一個棧來計算下一次的升溫距離。從前向後遍歷:

    

    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;
    }
相關文章
相關標籤/搜索