请根据每日 气温 列表 temperatures ,请计算在每一天需要等几天才会有更高的温度。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例 1: 输入: temperatures = [73,74,75,71,69,72,76,73] 输出: [1,1,4,2,1,1,0,0] 示例 2: 输入: temperatures = [30,40,50,60] 输出: [1,1,1,0] 示例 3: 输入: temperatures = [30,60,90] 输出: [1,1,0]
class Solution: def dailyTemperatures(self, temperatures: List[int]) -> List[int]: length = len(temperatures) stack = list() result = [0] * length for i, v in enumerate(temperatures): # 如果是空栈 后者当前元素小于栈顶元素 直接入栈 if not stack or stack[-1][1] > v: stack.append((i, v)) else: # 如果栈顶元素大于当前元素 栈顶元素出栈 继续跟下一个栈顶元素对比 while True: if stack and stack[-1][1] < v: # 通过索引相减 得到升温之间间隔的天数 num = i - stack[-1][0] index = stack.pop()[0] result[index] = num else: # 把栈中比当前元素小的值全部弹出 最后在把当前元素入栈 stack.append((i, v)) break return result