--- title: '739. Daily Temperatures' description: 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^th day to get a warmer temperature. If there is no future day for which this is possible, keep answer[i] == 0 instead icon: dot topics: - { name: "Array", slug: "array" } - { name: "Stack", slug: "stack" } - { name: "Monotonic Stack", slug: "monotonic-stack" } video: "cTBiBSnjO3c" issue: "https://github.com/prdlk/leetcode/issues/72" companies: - { name: "Google", period: "Thirty Days", frequency: 29 } - { name: "Chime", period: "Three Months", frequency: 100 } - { name: "Bloomberg", period: "Three Months", frequency: 59.7 } - { name: "Amazon", period: "Three Months", frequency: 42.8 } - { name: "Meta", period: "Three Months", frequency: 34.5 } - { name: "Anduril", period: "Six Months", frequency: 92.8 } - { name: "Goldman Sachs", period: "Six Months", frequency: 44.8 } - { name: "tcs", period: "Six Months", frequency: 43.5 } - { name: "Microsoft", period: "Six Months", frequency: 42.5 } sidebar: label: 'Daily Temperatures' badge: 'Medium' --- ### 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^5` - `30 <= temperatures[i] <= 100` ## Approach ```mermaid flowchart TD S(["dailyTemperatures(temperatures)"]) --> I["ans = zeros(n), stack = [] — indices of days still waiting"] I --> L{"more (i, temp)?"} L -- no --> E(["return ans"]) L -- yes --> W{"stack non-empty and temperatures[stack[-1]] < temp?"} W -- yes --> P["prev = stack.pop(); ans[prev] = i - prev — today resolves that day"] P --> W W -- no --> A["stack.append(i)"] A --> L ``` ## Solution ```py class Solution: def dailyTemperatures(self, temperatures: List[int]) -> List[int]: ans = [0] * len(temperatures) stack = [] for i, temp in enumerate(temperatures): while stack and temperatures[stack[-1]] < temp: prev = stack.pop() ans[prev] = i - prev stack.append(i) return ans ```