739. Daily Temperatures
題目給定一個陣列,裡面是一段時間日子的每日溫度,我們要找出每一天,再經過幾天後,就會遇到一個比較溫暖的天氣。
這個題目是一個單調棧 Monotonic 的問題。
class Solution:
def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
n = len(temperatures)
res = [0] * n
s = []
for i in range(n-1, -1, -1):
# 如果我們在棧裡面有存放 index ,我們先來看棧內存的 index 的溫度,跟當前我們比較的溫度,誰比較高,如果當前的溫度更高,我們就應該要開始退棧。因為我們是從後往前看,這樣代表的是後面的溫度沒有我現在的溫度高,我應該優先選擇現在的溫度,或是繼續退棧,直到棧內有更高的溫度就可以了。
while s and temperatures[s[-1]] <= temperatures[i]:
s.pop()
# 如果棧內沒有東西,那就代表後面沒有更高溫的日期,如果棧內還有東西,現在棧內的最後一個溫度就是下一個比現在高溫的日子,透過 index 可以計算出兩天的差異。
res[i] = 0 if not s else s[-1] - i
s.append(i)
return res