739. 每日温度 - 力扣(LeetCode)

方法1:暴力法

  • 时间:O(n²) ------ 最坏情况(递减序列)需比较 n(n-1)/2 次
  • 空间:O(1) ------ 仅输出数组
python 复制代码
# encoding = utf-8
# 开发者:Alen
# 开发时间: 11:04 
# "Stay hungry,stay foolish."

class Solution(object):
    def dailyTemperatures(self, temperatures):
        """
        :type temperatures: List[int]
        :rtype: List[int]
        """
        # 2026 - 1 - 7
        result = [0] * len(temperatures)
        for i in range(len(temperatures)):
            for j in range(i+1, len(temperatures)):
                if temperatures[i] < temperatures[j]:
                    result[i] = j - i
                    break

        return result

方法2:预处理 + 逆序优化(超有趣,本题的最强算法)

  • 时间 :平均 O(n),最坏 O(n²)(如 [5,4,3,2,1,6])
  • 空间:O(1)
python 复制代码
# encoding = utf-8
# 开发者:Alen
# 开发时间: 11:04 
# "Stay hungry,stay foolish."

class Solution(object):
    def __init__(self, temperatures):
        self.temperatures = temperatures
    def dailyTemperatures(self, temperatures):
        """
        :type temperatures: List[int]
        :rtype: List[int]
        """
        n = len(temperatures)
        answer = [0] * n

        # 从倒数第二天开始(最后一天永远是0)
        for i in range(n - 2, -1, -1):
            j = i + 1
            while j < n and temperatures[j] <= temperatures[i]:
                if answer[j] == 0:  # 后面没有更大的了
                    j = n  # 跳出循环
                    break
                j += answer[j]  # 跳到下一个可能更大的位置
            if j < n:
                answer[i] = j - i
        return answer

sol = Solution([73,74,75,71,69,72,76,73])
print(sol.dailyTemperatures([73,74,75,71,69,72,76,73]))

# i = 6(76)
# j = 7 → 73 ≤ 76
# answer[7] == 0 → break
# 👉 answer[6] = 0
#
# i = 5(72)
# j = 6 → 76 > 72
# 👉 找到!
# answer[5] = 6 - 5 = 1
#
# i = 4(69)
# j = 5 → 72 > 69
# 👉 answer[4] = 1
#
# i = 3(71)
# j = 4 → 69 ≤ 71
# answer[4] = 1 → j = 4 + 1 = 5
# j = 5 → 72 > 71
# 👉 answer[3] = 5 - 3 = 2
#
# i = 2(75)
# j = 3 → 71 ≤ 75
# answer[3] = 2 → j = 3 + 2 = 5
# j = 5 → 72 ≤ 75
# answer[5] = 1 → j = 5 + 1 = 6
# j = 6 → 76 > 75
# 👉 answer[2] = 4

方法3:单调栈(标准算法)

  • 时间:O(n) ------ 每个元素入栈出栈各一次
  • 空间:O(n) ------ 栈最多存 n 个索引
python 复制代码
# encoding = utf-8
# 开发者:Alen
# 开发时间: 11:04 
# "Stay hungry,stay foolish."

class Solution(object):
    def dailyTemperatures(self, temperatures):
        """
        :type temperatures: List[int]
        :rtype: List[int]
        """
        # 2026 - 1 - 7
        result = [0] * len(temperatures)
        stack = [] # [temp,index]
        for i, temp in enumerate(temperatures):
            while stack and temp > stack[-1][0]:
                stackT, stackInd = stack.pop()
                result[stackInd] = i - stackInd
            stack.append((temp, i))
        return result

结果

解题步骤:www.bilibili.com

相关推荐
微尘hjx1 小时前
【ByteTrack 04】多轨迹算法ByteTrack改进点
算法·yolo·目标检测·目标跟踪·bytetrack·ultralytics·车跟踪
行走的陀螺仪5 小时前
【转型攻略】2026 年,后端 / 全栈工程师转 AI Agent 方向:能力地图、按周学习路线与面试要点
人工智能·面试·职场和发展
小蒋观天下5 小时前
雷击与浪涌防护:前端SPD选型、接地网误区,接地不当反而引入干扰
深度学习·算法·机器学习
WBluuue7 小时前
数据结构与算法:分块(一):块状数组、块状链表
数据结构·c++·算法·链表
圣保罗的大教堂7 小时前
leetcode 3619. 总价值可以被 K 整除的岛屿数目 中等
leetcode
澳鹏Appen8 小时前
澳鹏重磅发布ExamOCRBench:面向端到端试卷判分的多任务基准
算法·benchmark·基准评测
benjormin8 小时前
Java数据结构 二叉搜索树
数据结构·算法
人工智能培训8 小时前
知识图谱:结构化表达实体与关系的知识组织技术
大数据·人工智能·算法·重构·生活·知识图谱
地平线开发者9 小时前
QAT 实战:从 PyTorch 模型到 J6E 实板精度与延时验证
pytorch·算法·自动驾驶