LeetCode Hot100(53/100)——739. 每日温度

LeetCode HOT 100 一、链表(共11题)(m i d d l e \color{orange}{middle}middle 题,暂时跳过)二、二叉树(共14题,含2道 h a r d \color{red}{hard}hard 题)(h a r d \color{red}{hard}hard 题,暂时跳过)(h a r d \color{red}{hard}hard 题,暂时跳过)三、DFS/BFS(共6题,含3道 h a r d \color{red}{hard}hard 题) 阅读详情

一、题目简介

题目链接:
LeetCode:每日温度

题目描述:
给定一个整数数组 temperatures,表示每天的温度。请返回一个数组 answer,其中 answer[i] 表示第 ( i ) 天之后,需要等待多少天 才会出现更高的温度。如果之后没有更高的温度,请置为 0。

示例:

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

二、问题分析

对于每个温度,我们希望知道下一个更高温度出现的间隔天数。这本质上是一个**“下一个更大元素”问题**的变体。

在这里,数组的元素是温度,而“更大元素”代表“更高温度的天数”。


三、解法思路总览

每日温度

暴力解法

=> 两层循环

=> 每天向后找更高温度

=> 时间复杂度 O(n²)

单调栈解法

=> 使用栈存储索引

=> 栈保持递减温度序

=> 遇到更高温度时出栈更新结果

=> 时间复杂度 O(n)


四、暴力解法

原理

对于每一天,往后依次查看未来的几天,直到找到一个温度更高的日期,并计算等待天数。

思路示意图

是

否

第 i 天温度

从 i+1 天起开始搜索

是否出现更高温度?

记录等待天数 j - i

返回 0

Java代码实现:

public int[] dailyTemperaturesBruteForce(int[] temperatures) {
    int n = temperatures.length;
    int[] res = new int[n];
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            if (temperatures[j] > temperatures[i]) {
                res[i] = j - i;
                break;
            }
        }
    }
    return res;
}

复杂度分析

指标复杂度
时间复杂度( O(n^2) )
空间复杂度( O(1) )

缺点: 当数据量很大时性能极低,需要优化。


五、单调栈优化解法(推荐)

原理讲解

使用一个栈来存储尚未找到更高温度的“索引”。
栈中的温度是自顶向下递减的。
当我们遇到一个比栈顶温度高的温度时,就意味着栈顶对应的那一天终于“等到了更高温度”。

流程说明

假设温度数组为 [73,74,75,71,69,72,76,73]

我们逐日扫描:

  1. 第一天 73 入栈。
  2. 第二天 74 高于栈顶 73 → 出栈并更新等待天数(1天)。
  3. 继续入栈新的温度。
  4. 重复上面的过程。

最终每个出栈时,都可以知道它要等待多少天。

时序图可视化

结果 栈 当前日 结果 栈 当前日 alt [当前温度更高] [当前温度不高] 比较温度 更新等待天数 出栈 入栈索引

Java代码实现:

import java.util.Stack;

public int[] dailyTemperatures(int[] temperatures) {
    int n = temperatures.length;
    int[] res = new int[n];
    Stack<Integer> stack = new Stack<>();

    for (int i = 0; i < n; i++) {
        while (!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()]) {
            int prevIndex = stack.pop();
            res[prevIndex] = i - prevIndex;
        }
        stack.push(i);
    }
    return res;
}

复杂度分析

指标复杂度
时间复杂度( O(n) ) — 每个元素最多进出栈一次
空间复杂度( O(n) ) — 栈空间存储未匹配的索引

六、对比总结

解法思路时间复杂度空间复杂度优点缺点
暴力解法双重遍历O(n²)O(1)简单易懂性能较差
单调栈栈存索引递减O(n)O(n)高效、最优解逻辑稍复杂
保姆级教程:在阿里云ECS上用Docker一键部署EMQX MQTT服务器(Ubuntu 20.04) 本文提供在阿里云ECS上使用Docker一键部署EMQX MQTT服务器的详细教程,涵盖从实例创建、Docker环境配置到EMQX部署与优化的全流程。适合物联网开发者快速搭建高效、安全的MQTT消息服务器,适用于智能家居、工业物联网等场景。 阅读详情

相关推荐

文石NoteX3国行版安装 Google Play经验分享

文石NoteX3国行版安装 Google Play经验分享。

2301_80693261的博客 7619

Leetcode HOT 100 题目总结(已完结)

文章目录前引题目博客链接Easy No.1 - No.21 前引 这段时间感觉动态规划已经做伤了 就是真的没什么动力再做下去了 后面没做的也都是难的不行的dp题目了 想着还是要做的 这段时间换点口味 把力扣HOT 100题给全做了 写个总结 题目博客链接 Easy No.1 - No.21 461. 汉明距离 617. 合并二叉树 104. 二叉树的最大深度 206. 反转链表 169. 多数元素 21. 合并两个有序链表 ...

Love 6's Private Blog 1万+

JMeter脚本录制-快速上手篇

有的项目应用场景下,压测时,需要考虑带宽因素,压测不只是压测接口,静态资源也要一起压测。一般来说,静态资源比较多,如果一个个手工去写请求,是比较繁琐的,此时,可以使用Jmeter的脚本录制功能。 步骤1,创建脚本录制模版。 JMeter菜单:文件>模版,下拉选择到Recording,点击“Create”按钮; 填写录制参数: hostToRecord:填写要录制的主机域名,例如,我们这里填入:www.baidu.com schemeToRecord:填写要录制的模式,例如,htt...

软件测试大叔 5734

力扣hot100

【代码】力扣hot100。

qq_59768361的博客 1404

惊呆了!Oracle 11g从入门到放弃的保姆级指南(新手必看)

本文为Oracle 11g数据库新手提供了一份详尽的入门指南。内容涵盖从安装配置、SQL*Plus工具使用、核心的SQL增删改查操作,到事务、索引等进阶概念的解析。文章旨在帮助初学者避开常见陷阱,快速掌握这一经典关系型数据库管理系统的基本操作与核心技能,实现从入门到上手。

ooo22的博客 270

【GNSS/Linux】BKG Ntrip Client (BNC) 的编译与安装

【GNSS/Linux】BKG Ntrip Client (BNC) 的编译与安装 1. BNC软件 1.1 软件介绍 The BKG Ntrip Client (BNC) is an Open Source multi-stream client program designed for a variety of real-time GNSS applications. It was primarily designed for receiving data streams from any Ntrip

小马甲的新马甲 7809

leetcode HOT100总结

本人菜鸡一枚,历时两个月时间把HOT100题做完(Ctrl C-V)了,做完之后还是感觉到很虚,很多中等题还是不会做,于是乎花几天时间把这100题给总结一下。一方面,对自己的知识梳理;另一方面,便于后续回顾。(完成度99,是因为有一道题目收费,没有做!哈哈哈!)以下所有题目都是用Python3实现的。 下面是对这些题目按照算法进行分类整体,主要包括排序、哈希表、递归\回溯、链表、双指针、动态规划、二分查找、贪心、树、深度优先搜索、广度优先搜索等。 在整理之前,先学习一下Python的基本数据类型有哪些,请

qq_36561737的博客 4758

Windows 10下用VS2022编译AFSIM 2.9.0的完整避坑指南

本文提供了在Windows 10系统下,使用Visual Studio 2022编译AFSIM 2.9.0仿真框架的详细指南。文章系统梳理了从环境准备、CMake配置、编译链接到安装打包的全流程,并重点针对编译过程中常见的文件编码、命名空间冲突等高频错误提供了具体解决方案,旨在帮助开发者高效避坑,顺利完成AFSIM在Windows平台上的构建。

weixin_28839549的博客 552

LeetCode 热题 HOT 100 题解(仅记录解题思路)

由于数组中只有一个元素出现一次,其余元素都出现两次,因此用集合中的元素之和的两倍减去数组中的元素之和,剩下的数就是数组中只出现一次的数字。遍历数组中的每个数字,如果集合中没有该数字,则将该数字加入集合,如果集合中已经有该数字,则将该数字从集合中删除,最后剩下的数字就是只出现一次的数字。指针p1在头结点处,指针p2在头结点的next处,然后p1每次移动1格,p2则走2步,若在其中一个进入null之前两者指向同一结点,则代表有环。使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。

a131529的博客 1万+

新手必看:用FileZilla从武大IGS中心下载GNSS数据,再到crx2rnx转换的完整流程

本文详细介绍了新手如何通过FileZilla从武汉大学IGS中心下载GNSS数据,并使用crx2rnx工具将数据转换为RINEX格式的完整流程。涵盖工具准备、FTP连接、文件解压、格式转换及常见问题排查,帮助测绘和地信专业人员高效处理GNSS观测值数据。

weixin_29292431的博客 427

华为海思:大小海思的双轮驱动战略分析

大海思的定位清晰明确,即专注于为华为内部提供高性能、高集成度的芯片解决方案,以支持华为终端、服务器等业务的快速发展。小海思的产品线广泛,涵盖了广域物联、短距物联、手机穿戴、显示交互、智慧视觉、智慧媒体、MCU、模拟以及光模块等多个领域。通过提供多样化的芯片解决方案,小海思旨在满足外部客户的不同需求,拓展华为海思在芯片市场的份额和影响力。大海思的产品布局主要围绕华为的内部需求展开。在智能手机应用处理器方面,大海思的麒麟系列芯片已经成为华为手机的标志性产品,以其出色的性能和能效比赢得了市场的广泛认可。

dream it possible 2928

Hot 100总结【leetcode】

leetcode hot100总结

weixin_44911248的博客 6641

[个人自用,全网最优]EDEM-FLUENT个人自学教程,拒绝手忙脚乱无用功!

[个人自用,全网最优]EDEM-FLUENT个人自学教程,拒绝手忙脚乱无用功!

zheaa的博客 4831

力扣 (LeetCode) LeetCode HOT 100

LeetCode-HOT-100力扣 (LeetCode) ????LeetCode 热题 HOT 100 ⚡ ???? 如果你有问题https://webvueblog.github.io/LeetCode-HOT-100/1. 两数之和2. 两数相加3. 无重复字符的最长子串4. 寻找两个正序数组的中位数5. 最长回文子串10. 正则表达式匹配11. 盛最多水的容器15. 三数之和17. 电话号码的字母...

程序员哆啦A梦,蓝胖子 2514

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

HOT 100(导航)【LeetCode】

HOT 100(导航)【LeetCode】

小心星的博客 866

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【力扣Hot 100+经典题型】刷题记录(Python版)

力扣hot 100刷题记录

我的技术栈碎碎念空间 7854

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

leetcode热题HOT100汇总——java题解已完结撒花

为了学习本文捋顺leetcode热题HOT100的汇总 方便自己秋招刷题 仅作刷题笔记使用 感兴趣的小伙伴点一个赞吧。

qq_41810415的博客 9417

Leetcode hot100 Java刷题(一)

在遍历链表时,将当前节点的 next 指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。右指针不断向右移动,每次右指针指向非零数,则将左右指针对应的数交换,同时左指针右移。所有当前右端点, 符合条件的子数组 有 min(minI,maxI)−i0个。使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。i0表示 离当前右端点最近 的 不在 [minK,maxK]范围的 位置。上面这个解法不符合要求,用了除法,并且空间复杂度不是O(1)

开心星人的博客 1179

Leetcode hot100题 个人整理版

2.两数相加 给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 3. 无重复字符的最长子串 4. 寻找两个正序数组的中位数 给定两个大小分别为 mmm 和 nnn 的正序(从小到大)数组 nums1nums1nums1 和 nums2nums2nums2。请你找出并返回这两个正序数组的中位数.算法的时间复杂度应该为 O(log

zombotany的博客 3761

HOT100速成

力扣刷题

2301_80011010的博客 201

LeetCode HOT 100刷题总结

文章目录1 哈希1.1 1-1.两数之和🟢1.2 2-49.字母异位词分组🟡1.3 3-128.最长连续序列🟡2 双指针2.1 4-283.移动零🟢2.2 6-15.三数之和🟡2.3 7-11.盛最多水的容器🟡2.4 8-42.接雨水🔴3 滑动窗口3.1 9-3.无重复字符的最长子串🟡3.2 10-438.找到字符串中所有字母异位词🟡4 子串4.1 11-560.和为 K 的子数组🟡5 矩阵5.1 73.矩阵置零🟡6 链表6.1 23-160.相交链表🟢6.2 24-206.反转链表🟢🔥6.3 92.反转链

夏日 の blog 1915

leetcode刷题之HOT100中等题

(C++,部分题目收录) 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的所有字母得到的一个新单词。示例 1: 输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]] 128. 最长连续序列 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计

DOUBIEIS的博客 1056

LeetCode 热题 HOT 100 完整题解笔记&知识点分类 C++代码实现

1、知识点分布 2、完整代码

小哈里的博客 1万+

Leetcode Hot 100目录

2. 两数相加(用额外和空间,不用额外空间如何做)

Dou 893

LeetCode Hot100 7天逐题清单

1. 两数之和15. 三数之和42. 接雨水53. 最大子数组和121. 买卖股票的最佳时机128. 最长连续序列238. 除自身以外数组的乘积283. 移动零347. 前 K 个高频元素448. 找到所有数组中消失的数字560. 和为 K 的子数组739. 每日温度84. 柱状图中最大的矩形209. 长度最小的子数组11. 盛最多水的容器169. 多数元素41. 缺失的第一个正数54. 螺旋矩阵75. 颜色分类56. 合并区间。

hello! 578

学习算法--hot100

思路:此题可以直接使用双循环来完成,简便的方法是栈,利用栈的特性存储温度,当某天温度大于栈顶时,循环使元素出栈,更新数组当前i与栈顶i的差。思路:此题使用动态规划,不仅要对相加和数组更新还要对最大值更新。题目一:最大子数组和。

2303_79941838的博客 169
上一篇: LeetCode Hot100(52/100)——394. 字符串解码
下一篇: LeetCode Hot100(54/100)——215. 数组中的第K个最大元素
梨梨(AI版)
博客等级 码龄8年 1万+粉丝 225原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梨梨(AI版)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值