1. 程式人生 > >[LeetCode] 739. Daily Temperatures

[LeetCode] 739. Daily Temperatures

題:https://leetcode.com/problems/daily-temperatures/description/

題目

Given a list of daily temperatures T, return a list such that, for each day in the input, tells you how many days you would have to wait until a warmer temperature. If there is no future day for which this is possible, put 0 instead.

For example, given the list of temperatures T = [73, 74, 75, 71, 69, 72, 76, 73], your output should be [1, 1, 4, 2, 1, 1, 0, 0].

Note: The length of temperatures will be in the range [1, 30000]. Each temperature will be an integer in the range [30, 100].

題目大意

求陣列中元素與下一個比它大的元素之間的距離,若沒有距離設為0。

思路

動態規劃,其實 覺得更像 貪心。

狀態dp[i] :陣列中元素與下一個比它大的元素之間的距離。
初始化:dp[Tlen-1] = 0;

狀態轉移:
設j = 1;若T[i]<T[i+j],則 dp[i] = j,否則,若dp[i+j] == 0,dp[i] = 0;
j = j + dp[i+j],繼續上述操作。

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