演算法 棧 每日溫度

2021-10-07 02:23:16 字數 1579 閱讀 8254

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

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

最直觀的,遍歷所有元素,每次一次往後檢查直到第乙個比當前元素氣溫高的即求得氣溫公升高所有天數。

利用棧,如果棧為空或者當前元素比棧頂元素大,就將棧頂元素出棧並計算相應結果,然後繼續比較下乙個棧頂元素,直到當前元素不大於棧頂元素或棧為空。

最後將元素直接放入棧頂。

遍歷完成後,還需要處理棧中元素,剩餘的元素代表右側沒有比他們更高的氣溫了,所以公升高氣溫天數都為0。

class

solution);

}else

// 當前數字大於棧頂就出棧

tmp.

pop();

// 公升高所需天數

result[top[0]

]= i - top[0]

;}// 最後將當前數字入棧

思路和前面棧方法相同,只不過不用stack類而是自己用陣列模擬棧,減少了很多不必要的複雜操作開銷。

class

solution

offset--

;// 公升高所需天數

result[top[0]

]= i - top[0]

;}// 最後將當前數字入棧

要求右側第乙個溫度跟高的元素,所以其實從右往左找更方便。

而且,我們還加入乙個快速判定方法,這裡假設初始時j=i+1:

棧與每日溫度

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

單調棧 每日溫度

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

739 每日溫度 遞減棧

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