LeetCode-in-Ruby.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

# @param {Integer[]} temperatures
# @return {Integer[]}
def daily_temperatures(temperatures)
  sol = Array.new(temperatures.length, 0)
  (temperatures.length - 2).downto(0) do |i|
    j = i + 1
    while j <= temperatures.length
      if temperatures[i] < temperatures[j]
        sol[i] = j - i
        break
      else
        break if sol[j].zero?

        j += sol[j]
      end
    end
  end
  sol
end