難度:★★★☆☆
類型:數(shù)組
方法:棧
力扣鏈接請移步本題傳送門
更多力扣中等題的解決方案請移步力扣中等題目錄
請根據(jù)每日 氣溫 列表,重新生成一個列表。對應(yīng)位置的輸出為:要想觀測到更高的氣溫,至少需要等待的天數(shù)。如果氣溫在這之后都不會升高,請在該位置用 0 來代替。
例如,給定一個列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的輸出應(yīng)該是 [1, 1, 4, 2, 1, 1, 0, 0]。
提示:氣溫 列表長度的范圍是 [1, 30000]。每個氣溫的值的均為華氏度,都是在 [30, 100] 范圍內(nèi)的整數(shù)。
解答
這道題與行星碰撞類似,在一維數(shù)組中存在結(jié)果與前后之間的關(guān)系影響時,可以用棧來做。
定義一個空棧stack(用來存儲下標(biāo))和長度為T的長度的結(jié)果數(shù)組result(初始化為零),從前到后遍歷所溫度列表T中所有溫度,每當(dāng)遇到新的溫度高于棧頂元素時,執(zhí)行出棧操作,直到棧頂元素不再低于新加入的溫度。再將當(dāng)前的元素入棧。
在出棧的過程中,需要及時的將出棧元素與當(dāng)前元素的下標(biāo)差填充在結(jié)果列表中對應(yīng)的位置。
class Solution:
def dailyTemperatures(self, T):
result = [0] * len(T)
stack = []
for i, temperature in enumerate(T):
while stack and temperature > T[stack[-1]]:
prev_index = stack.pop()
result[prev_index] = i - prev_index
stack.append(i)
return result
如有疑問或建議,歡迎評論區(qū)留言~
有關(guān)更多力扣中等題的python解決方案,請移步力扣中等題解析