題目出處
難度
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 個人解法筆記](/images/restored/2022/04/img_0336.webp)
input handling
如果沒有 input,return []
Boundary conditions
for 搜尋所有的天數,
如果過程中有發現更高的溫度,就去更新結果。
![Featured image of post 【Leetcode】python - [739] Daily Temperatures 個人解法筆記](/images/restored/2022/04/img_0336.jpg)