📜  门| GATE-CS-2007 |第 31 题(1)

📅  最后修改于: 2023-12-03 15:12:41.703000             🧑  作者: Mango

题目描述

给定一个数组,其中每个元素表示该位置的天气温度。您需要找到下一个最高的温度的天数。如果它不是以后的某个日期,则该数字等于0。

例如,给定温度= [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 2, 3, 1, 1, 0, 0, 0]。

思路

  1. 创建一个空栈来存储天气温度列表的索引
  2. 遍历天气温度列表,直到结束
  3. 在每个温度上,做以下操作:
    1. 如果栈是空的,将索引推入栈
    2. 如果栈不为空,检查当前温度是否大于栈顶温度
    3. 如果当前温度大于栈顶温度,则将栈顶索引弹出,并将当前温度的索引 - 栈顶索引 存入到结果列表中对应的位置
    4. 重复步骤3,直到栈为空或者当前温度小于等于栈顶温度
    5. 将当前温度的索引推入栈
  4. 返回结果列表

代码实现

def dailyTemperatures(T):
    stack = []
    result = [0] * len(T)
    
    for i, t in enumerate(T):
        while stack and t > T[stack[-1]]:
            prev_index = stack.pop()
            result[prev_index] = i - prev_index
        stack.append(i)
    
    return result

时间复杂度

本算法的时间复杂度为O(n),因为我们只遍历了一次天气温度列表。同时,我们最多将每个索引推入和弹出栈一次,所以空间复杂度为O(n)。