739. 每日温度

每日温度

题目描述:

请根据每日 气温 列表 temperatures ,请计算在每一天需要等几天才会有更高的温度。如果气温在这之后都不会升高,请在该位置用 0 来代替。

示例 1:

输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]
示例 2:

输入: temperatures = [30,40,50,60]
输出: [1,1,1,0]
示例 3:

输入: temperatures = [30,60,90]
输出: [1,1,0]

提示:

1 <= temperatures.length <= 105
30 <= temperatures[i] <= 100

思路:

从后往前动态规划,从后一个开始找第一个比他大的,每次跳后一个数的第一个比他大的数的跳数。

代码:

func dailyTemperatures(temperatures []int) []int {
    j := 0
    num := make([]int, len(temperatures))
    num[len(temperatures)-1] = 0
    for i:= len(temperatures)-2;i>=0;i--{
        if temperatures[i] < temperatures[i+1]{
            num[i] = 1
        }else{
            j = i+1
            for j < len(temperatures) && num[j] != 0{
                j = num[j]+j
                if temperatures[j] > temperatures[i]{
                    num[i] = j-i
                    break
                }
            }
        }
    }
    return num
}

代码效率:

执行用时:128 ms, 在所有 Go 提交中击败了82.30%的用户
内存消耗:10 MB, 在所有 Go 提交中击败了6.86%的用户