Leetcode 739 每日溫度

2021-10-07 02:27:26 字數 1111 閱讀 3920

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

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

首先看到題目描述中的列表長度小於等於30000,就知道這種題目寫出的演算法複雜度不能達到o(n

2n^2

n2),否則執行時間會非常長,因此我們盡量只遍歷常數次列表,用時間複雜度為o(n)的演算法實現。

我們要在每次遍歷列表的時候獲取盡可能多的資訊,首先以題目中舉的例子來說,第乙個元素是73,第二個是74比73大,那麼73所在位置的結果就為1,同樣74所在位置的結果也為1.到了75,它的下一位是71,比75小,因此我們還需要向後遍歷,69,72,直到76才符合題意,因此75所在位置的結果為4.那麼對於中間的元素來說我們就這麼略過去嗎?當然不能,我們要記錄下這些元素。我們可以使用乙個遞減棧來儲存中間的資料,所謂的遞減棧就是每次新加入的元素都≤當前的棧頂元素,因此我們得到了以下演算法:

1)遍歷陣列,每遍歷乙個元素就將它和當前棧頂元素比較,如果棧空或這個元素≤棧頂元素,就將它壓入棧中。

2)如果這個元素比棧頂元素大,就彈出棧頂元素,由於棧是後進先出且是遞減的,因此當前元素就是下乙個比彈出的元素大的,因此彈出元素所在位置的結果為當前遍歷的元素下標-彈出元素的下標。如果此時棧頂元素仍然比當前遍歷的元素小,繼續重複2),否則將當前遍歷的元素壓入棧中。

3)直到所有元素都已經被遍歷後,此時棧中元素為遞減的,因此每個元素所在位置的結果都為0.

class

solution

stack.

push

(i);}/*

//此時棧中元素是遞減的

while(!stack.isempty())*/

return res;

}}

執行時間

20ms

81.87%

消耗記憶體

47.1m

6.45%

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...