Featured image of post 【Leetcode】python - [739] Daily Temperatures 個人解法筆記

【Leetcode】python - [739] Daily Temperatures 個人解法筆記

整理 LeetCode #739 — linked list、演算法分析、解。

題目出處

739. Daily Temperatures

難度

Medium

題目分類

Array, Stack, Monotonic Stack

2026-07-24 二刷

個人範例程式碼 - 二刷 (2026/07/24)

class Solution:
    def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
        stack = [] # keep lower temp idx
        ans = [0] * len(temperatures)

        for today, temp in enumerate(temperatures):
            while stack and temp > temperatures[stack[-1]]:
                prev_temp_idx = stack.pop()
                ans[prev_temp_idx] = today - prev_temp_idx

            # must append today temp at least
            stack.append(today)

        return ans

算法說明

存一個 stack,只存比當前溫度低的全部,會是 desc 的順序
當發現更高溫度時,一路 pop idx,到今天不是更高溫為止

注意:今天每輪必存(放在最後 append),因為今天的判斷還沒結束,需要隔天的資訊。

monotonic stack 筆記:存 idx 還是存 temp, 建議存 idx, 當出現重複溫度時不麻煩

Time Complexity

O(n)

Space Complexity

O(n)

Boundary conditions

剩下找不到答案的要補 0 -> 一開始 Init 就給全 0

2022-04-28 一刷

個人範例程式碼 - 一刷 (2022/04/28)

class Solution:
    def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
        if not temperatures:
            return []

        stack = []
        ans = [0 for _ in range(len(temperatures))]
        for today, temperature in enumerate(temperatures):
            while stack and temperatures[stack[-1]] < temperature: # today's temperature is higher
                idx = stack.pop(-1)
                ans[idx] = today - idx
            stack.append(today)

        return ans

最近在練習程式碼本身就可以自解釋的 Coding style,可以嘗試直接閱讀程式碼理解

算法說明

stack 的經典題型,透過 stack 紀錄沿路上的過去史,
並不斷地以「今日」去比對「過去尚未產生結果的結果」

  • pop 至過去結果溫度「比今日小的所有結果」,相距日期則為「today - 該日」

【Leetcode】python - [739] Daily Temperatures 個人解法筆記

input handling

如果沒有 input,return []

Boundary conditions

for 搜尋所有的天數,
如果過程中有發現更高的溫度,就去更新結果。

Reference

Licensed under CC BY-NC-SA 4.0
最後更新 Jul 24, 2026
使用 Hugo 建立
主題 StackJimmy 設計