Daily Temperatures

Problem

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

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 i:sup:`th` 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:

  • 1 <= temperatures.length <= 10:sup:`5`

  • 30 <= temperatures[i] <= 100

Pattern

Array, Stack, Monotonic Stack

Approaches

Code

def dailyTemperatures(temperatures: list[int]) -> list[int]:
    stack = []

    output = [0] * len(temperatures)

    for i, temp in enumerate(temperatures):

        while len(stack) > 0 and temperatures[stack[-1]] < temp:
            j = stack.pop()
            output[j] = i - j

        stack.append(i)

    return output

Test

>>> from daily_temperatures__monotonic_stack import dailyTemperatures
>>> dailyTemperatures([73, 74, 75, 71, 69, 72, 76, 73])
[1, 1, 4, 2, 1, 1, 0, 0]
>>> dailyTemperatures([30, 40, 50, 60])
[1, 1, 1, 0]
>>> dailyTemperatures([30, 60, 90])
[1, 1, 0]
daily_temperatures__monotonic_stack.dailyTemperatures(temperatures: list[int]) list[int]