739.每日溫度-python
阿新 • • 發佈:2018-12-14
題目
根據每日 氣溫 列表,請重新生成一個列表,對應位置的輸入是你需要再等待多久溫度才會升高的天數。如果之後都不會升高,請輸入 0 來代替。
示例:
輸入: temperatures = [73, 74, 75, 71, 69, 72, 76, 73]
輸出: [1, 1, 4, 2, 1, 1, 0, 0]
解法:
主要的思想是通過模擬棧的方式來實現的,首先是判斷如果是該棧為空或者temperatures[i]小於棧頂元素的時候進行壓棧操作,因為當該元素小於棧頂元素的時候不需要進行任何操作,而當出現temperatures[i]大於棧頂元素的時候則進行比較,如果棧中元素小於temperatures[i]時則進行出棧操作直到棧空,然後將此時的temperatures[i]壓棧然後重複之前的操作。注意這題重點在於當後一個數小於前一個數的時候是沒有任何意義的,只有當出現更大的數時才進行操作。
示例
class Solution:
def dailyTemperatures(self, temperatures):
"""
:type temperatures: List[int]
:rtype: List[int]
"""
l = []
stack = []
for i in range(len(temperatures)):
l.append(0)
if stack and temperatures[i] > stack[-1][0]:
self.comparison(stack, temperatures[i], i, l)
stack.append((temperatures[i], i))
return l
def comparison(self, stack, nub, index, l):
if stack and nub > stack[-1][0]:
tup = stack.pop()
l[tup[1]] = index - tup[1]
self.comparison(stack, nub, index, l)
這個解法速度一般,只有想到其他解法再發上來。