739. Daily Temperatures

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