LC 739栈与队列中等第 37 / 95 题

每日温度

Daily Temperatures

单调栈
本机进度仅保存在当前浏览器

题目描述

给定一个整数数组 temperatures 表示每天的温度,返回一个数组 answer,其中 answer[i] 是指对第 i 天来说,还要等多少天才能等到更暖和的温度;之后都没有更暖的则记 0。

示例:temperatures = [73, 74, 75, 71, 69, 72, 76, 73],输出 [1, 1, 4, 2, 1, 1, 0, 0]。

解题思路

  1. 本质是"下一个更大元素"的变体:对每个 i 找右边第一个比它大的下标 j,答案为 j - i。
  2. 单调递减栈:栈里存"还在等更暖天"的下标,对应温度自栈底到栈顶递减。
  3. 新温度高于栈顶时,栈顶元素的答案确定(当前下标减栈顶),弹出并重复。
  4. 每个下标最多入栈出栈各一次,O(n) 完成。

参考实现

查看参考实现Python · 建议先自行作答
def dailyTemperatures(T):
    # 单调递减栈存下标,遇到更暖天即结算栈顶
    stack = []
    ans = [0] * len(T)
    for i, t in enumerate(T):
        while stack and T[stack[-1]] < t:
            j = stack.pop()
            ans[j] = i - j
        stack.append(i)
    return ans

复杂度与归属

时间复杂度O(n)
空间复杂度O(n)
所属分类栈与队列
题源LeetCode 739

关联教程

返回题图鉴