LeetCode-in-Scala.github.io

739. Daily Temperatures

Medium

Given an array of integers temperatures represents the daily temperatures, return an array answer such that answer[i] is the number of days you have to wait after the ith day to get a warmer temperature. If there is no future day for which this is possible, keep answer[i] == 0 instead.

Example 1:

Input: temperatures = [73,74,75,71,69,72,76,73]

Output: [1,1,4,2,1,1,0,0]

Example 2:

Input: temperatures = [30,40,50,60]

Output: [1,1,1,0]

Example 3:

Input: temperatures = [30,60,90]

Output: [1,1,0]

Constraints:

Solution

object Solution {
    def dailyTemperatures(temperatures: Array[Int]): Array[Int] = {
        val sol = new Array[Int](temperatures.length)
        sol(temperatures.length - 1) = 0
        for (i <- (sol.length - 2) to 0 by -1) {
            var j = i + 1
            while (j < sol.length) {
                if (temperatures(i) < temperatures(j)) {
                    sol(i) = j - i
                    j = sol.length // exit loop
                } else {
                    if (sol(j) == 0) {
                        j = sol.length // exit loop
                    } else {
                        j += sol(j)
                    }
                }
            }
        }
        sol
    }
}