LeetCode 每日溫度 739

2022-03-11 01:16:33 字數 923 閱讀 9806

根據每日氣溫列表,請重新生成乙個列表,對應位置的輸入是你需要再等待多久溫度才會公升高的天數。如果之後都不會公升高,請輸入0來代替。

例如,給定乙個列表temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的輸出應該是[1, 1, 4, 2, 1, 1, 0, 0]

說實話,看到這個題的時候,我下意識的想法是,兩個for迴圈就可以解決,因為是找到第乙個大於當前溫度的溫度,所以並不認為時間複雜度為n的平方。並且**也順利通過了。可這畢竟是一道中等難度的題目,我們還是要進一步思考一下如何優化。

如果是從後向前遍歷的話,先遍歷第二天,我們需要記錄下第二天的溫度,然後遍歷到第一天,需要用第一天和第二天的溫度作比較,發現第一天的氣溫比第二天的低,此時我們可以直接修改第一天(也就是當前遍歷的位置)的結果,將其設定為1。

所以從分析來看,從後向前遍歷比較好一點,因為兩者都是需要記錄下一系列資訊,但是從前向後遍歷的話還需要返回去進行修改結果,但是從後向前遍歷的話只需要修改當前的結果即可

我們在棧中儲存當前的氣溫的下標,[為什麼不儲存值呢?知道下標,我們用temperatures[i]就可以知道值啊,並且我們還多儲存了乙個位置資訊]。棧頂溫度一定是離當前溫度最近的溫度位置

如果當前溫度,大於棧頂溫度的話,說明棧頂溫度的位置不是下乙個回公升的溫度,那我們就要更換棧頂,即出棧操作,一直比較,知道找到小於棧頂溫度。接著當前溫度小於棧頂溫度,那輸出應該是stack.peek()-i;

public int dailytemperatures(int temperatures) 

return res;

}

LeetCode 739 每日溫度

根據每日 氣溫 列表,請重新生成乙個列表,對應位置的輸入是你需要再等待多久溫度才會公升高的天數。如果之後都不會公升高,請輸入 0 來代替。例如,給定乙個列表 temperatures 73,74,75,71,69,72,76,73 你的輸出應該是 1,1,4,2,1,1,0,0 static con...

LeetCode 739 每日溫度

根據每日 氣溫 列表,請重新生成乙個列表,對應位置的輸入是你需要再等待多久溫度才會公升高的天數。如果之後都不會公升高,請輸入 0 來代替。例如,給定乙個列表 temperatures 73,74,75,71,69,72,76,73 你的輸出應該是 1,1,4,2,1,1,0,0 從後一天往前一天推,...

leetcode739 每日溫度

即找之後第乙個比自己大的元素 參考 用棧實現 將元素 下標 依次入棧並且保證棧內元素從棧頂到棧底是遞增的。如果當前元素比棧頂元素大,則說明當前元素就是比棧頂元素大的第乙個元素,求出兩個下標的差值即為棧頂元素對應的結果。依次出棧並計算下標差直到棧頂元素大於當前元素,將當前元素入棧 比如 t 73,74...