題目描述:
根據每日 氣溫 列表,請重新生成乙個列表,對應位置的輸入是你需要再等待多久溫度才會公升高超過該日的天數。如果之後都不會公升高,請在該位置用 0 來代替。
例如,給定乙個列表temperatures = [73, 74, 75, 71, 69, 72, 76, 73]
,你的輸出應該是[1, 1, 4, 2, 1, 1, 0, 0]
。
題目解析:
對於輸入 73,它需要經過一天才能等到溫度的公升高,也就是在第二天的時候,溫度公升高到 74 ,所以對應的結果是 1。
對於輸入 74,它需要經過一天才能等到溫度的公升高,也就是在第三天的時候,溫度公升高到 75 ,所以對應的結果是 1。
對於輸入 75,它經過 1 天後發現溫度是 71,沒有超過它,繼續等,一直等了四天,在第七天才等到溫度的公升高,溫度公升高到 76 ,所以對應的結果是 4 。
對於輸入 71,它經過 1 天後發現溫度是 69,沒有超過它,繼續等,一直等了兩天,在第六天才等到溫度的公升高,溫度公升高到 72 ,所以對應的結果是 2 。
對於輸入 69,它經過一天後發現溫度是 72,已經超過它,所以對應的結果是 1 。
對於輸入 72,它經過一天後發現溫度是 76,已經超過它,所以對應的結果是 1 。
對於輸入 76,後續沒有溫度可以超過它,所以對應的結果是 0 。
對於輸入 73,後續沒有溫度可以超過它,所以對應的結果是 0 。
具體**如下:
t = [73, 74, 75, 71, 69, 72, 76, 73]
def daily_temp(tem):
# 模擬乙個遞減棧,存放當天的索引
stack =
# 結果列表,幾天後氣溫才公升高
res = [0] * len(tem)
# 迴圈整個列表
for i in range(len(tem)):
# 當棧不為空且當前天數的氣溫大於棧頂的氣溫時,計算棧頂那天過幾天氣溫才會公升高
while stack and tem[i] > tem[stack[-1]]:
res[stack[-1]] = i - stack[-1]
# 計算完出棧
stack.pop()
# 棧為空或者沒有超過的溫度,入棧乙個
return res
if __name__ == '__main__':
print(daily_temp(t))
單調棧的應用 每日溫度
何為單調棧?單調棧有什麼用?什麼情況下可以使用單調棧?為什麼要使用單調棧?相信第一次接觸到單調棧的你都會有這些疑問 棧是操作受限的線性表,對於插入和刪除都只能在一端進行,而單調棧就是在棧的基礎上進一步限制了,有單調遞增棧和單調遞減棧,對於單調遞增棧來說,就是需要保證棧中的元素大小是單調遞增的,同理,...
棧與每日溫度
根據每日 氣溫 列表,請重新生成乙個列表,對應位置的輸出是需要再等待多久溫度才會公升高超過該日的天數。如果之後都不會公升高,請在該位置用 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 最直觀的...