难度:★★★☆☆
类型:数组
方法:栈
力扣链接请移步本题传送门
更多力扣中等题的解决方案请移步力扣中等题目录
请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。
例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。
提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。
解答
这道题与行星碰撞类似,在一维数组中存在结果与前后之间的关系影响时,可以用栈来做。
定义一个空栈stack(用来存储下标)和长度为T的长度的结果数组result(初始化为零),从前到后遍历所温度列表T中所有温度,每当遇到新的温度高于栈顶元素时,执行出栈操作,直到栈顶元素不再低于新加入的温度。再将当前的元素入栈。
在出栈的过程中,需要及时的将出栈元素与当前元素的下标差填充在结果列表中对应的位置。
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
如有疑问或建议,欢迎评论区留言~
有关更多力扣中等题的python解决方案,请移步力扣中等题解析