739. 每日温度
问题:
请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。
例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。
提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。
解决:
思想:
两种思路:
最简单的就是我们从前往后遍历,去寻找更高温度的日子,然后减去下标,但这种时间复杂度太高采用单调栈的思想
python代码:
class Solution:
def dailyTemperatures(self
, T
: List
[int]) -> List
[int]:
n
=len(T
)
result
=[0]*n
for i
in range(len(T
)-1):
j
=i
+1
count
=1
while(T
[j
]<=T
[i
]):
count
+=1
j
+=1
if(j
>=n
):
count
=0
break
result
[i
]=count
return result
class Solution:
def dailyTemperatures(self
, T
: List
[int]) -> List
[int]:
stack
=[]
result
=[0]*len(T
)
for i
in range(len(T
)):
while stack
and T
[i
]>T
[stack
[-1]]:
result
[stack
[-1]]=i
-stack
[-1]
stack
.pop
()
stack
.append
(i
)
return result