java数据结构与算法刷题-----LeetCode739. 每日温度

Java刷题大全(笔试题)【大厂必备】(基础) Java全网最全刷题大全 阅读详情
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846

在这里插入图片描述

1. 法一:单调栈

解题思路:时间复杂度O(n),空间复杂度O(n)
  1. 单调栈(递增):入栈前,先出栈比它小的所有栈顶元素。保持栈单调递增
  2. 每一个元素入栈前,如果发现它>栈顶元素,说明他就是比栈顶这个气温高的第一个气温
  1. 当 i = 0时,单调栈为空,因此将0入栈
  1. stack = [0(73)]
  2. ans = [0,0,0,0,0,0,0,0]
  1. 当 i = 1 时,由于 74 大于 73,因此移除栈顶元素 0,赋值ans[0]:= 1 - 0, 将 1 进栈。
  1. stack = [1(74)]
  2. ans = [1,0,0,0,0,0,0,0]
  1. 当 i = 2 时,由于 75 大于 74,因此移除栈顶元素 1,赋值ans[]:= 2 - 1, 将 2 进栈。
  1. stack = [2(75)]
  2. ans = [1,1,0,0,0,0,0,0]
  1. 当 i = 3 时,由于 71 小于 75,因此将 3 进栈。
  1. stack = [2(75),3(71)]
  2. ans = [1,1,0,0,0,0,0,0]
  1. 当 i = 4时,由于 69 小于 71,因此将 4 进栈。
  1. stack = [2(75),3(71),4(69)]
  2. ans = [1,1,0,0,0,0,0,0]
  1. 当 i = 5时,由于 72 大于 69 和 71,因此移除栈顶元素 4 和 3,赋值ans[4]:= 5 - 4, 和 ans[3] := 5 - 3, 将 5 进栈。
  1. stack = [2(75),5(72)]
  2. ans = [1,1,0,2,1,0,0,0]
  1. 当 i = 6 时,由于 76 大于 62 和 75,因此移除栈顶元素 5 和 2,赋值ans[5]:= 6 - 5, 和 ans[2] := 6 - 2, 将 6 进栈。
  1. stack = [6(76)]
  2. ans = [1,1,4,2,1,1,0,0]
  1. 当 i = 7时,由于 73 大于 76,因此将 7 入栈
  1. stack = [6(76), 7(73)]
  2. ans = [1,1,4,2,1,1,0,0]
代码

在这里插入图片描述

class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        int n = temperatures.length;
        //单调栈,这里规定此单调栈,栈顶永远是最大的,其它元素依次递减
        int[] stack = new int[n];//空间复杂度O(n),保存各气温的   “下标”
        int[] ans = new int[n];//答案保存在这里
        int index = 0;//这是栈的栈顶指针
        //如果当前元素入栈前,发现栈顶元素比它小,那么他就是栈顶元素后面的第一个比栈顶元素高的气温
        for(int i = 0; i < n; i++){//遍历temperatures
            //如果栈不为空,并且当前i位置的气温 > 栈顶气温。就说明找到了栈顶气温的第一个比它温度高的
            while(index != 0 && temperatures[i] > temperatures[stack[index - 1]]){
                index--;//出栈
                //ans保存栈顶元素距离i位置这个比它高的气温,中间隔着几天
                ans[stack[index]] = i - stack[index];//
            }
            //每个气温入栈之前,确保栈内没有比它气温低的。
            stack[index++] = i;
        }
        return ans;
    }
}

1. 法二:双指针

解题思路:时间复杂度O( n ∗ l o g 2 n n * log_2{n} n∗log2​n),空间复杂度O(1)
  1. 无需额外空间,且只有在最坏情况下为O( n ∗ l o g 2 n n * log_2{n} n∗log2​n)时间复杂度,平均时间复杂度接近O(n)
  2. 从第二个气温开始,每个气温依次往前观察,如果前面某个气温没找到比它高的气温,那么当前气温就是前面这个气温的,第一个比它高的气温。
代码

在这里插入图片描述

class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        int ans[] = new int[temperatures.length];//保存答案
        for(int i = 1;i<temperatures.length;i++){//依次遍历第二个开始的每个气温
            int j = i-1;//向前遍历的指针
            while(j>=0){//如果还可以遍历
                if(ans[j]==0){//如果前面的气温,还有没有找到比它高气温的
                    if(temperatures[i]>temperatures[j]) {//看看当前气温是否比它高
                        ans[j] = i-j;//如果比它高,那么当前i指向的气温就是第一个比它高的,保存他俩相隔的天数
                    }else break;//如果当前i指向的气温比j指向的小,说明再前面的都已经找到比它大的气温了,
                }
                j--;//j前移
            }
        }
        return ans;
    }
}
Java实现 LeetCode 739 每日温度(暴力循环) 739. 每日温度 根据每日 气温 列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。 例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。 提示:气温 列表长度的范围是 [1, 30000... 阅读详情

相关推荐

中科蓝讯Downloader配置实战:从软硬开关机到ANC降噪的完整指南

本文提供了中科蓝讯Downloader工具的详细配置实战指南。内容涵盖从基础的软硬开关机选择与配置,到核心的EQ音效调试、触摸按键与入耳检测优化,以及高阶的ANC降噪与电源管理设置。旨在帮助开发者快速掌握关键配置项,高效完成蓝牙耳机产品的功能调试与优化。

s4t5u6v7的博客 509

牛客网——Java刷题篇

牛客-找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决

chenchenchencl的博客 1万+

Open3D:读写点云与可视化(C++)

迭代 //Open3D #include "Open3D/Open3D.h" //Eigen #include "Eigen/Dense" void testOpen3D::xjGetInformation(const QString &pcPath) { /* read PC */ auto cloud_ptr = std::make_shared<open3d::geometry::PointCloud>(); if (!open3d::io::ReadPointCl

累了就要打游戏 1万+

【刷题记录⑨】Java工程师丨字节面试真题(三)

我几乎每天都会刷题训练来使自己对各种算法随时保持一个清晰的状态。要知道眼过千遍不如手过一遍,想成为一名合格的开发工程师,更要逼迫自己养成动手的好习惯。

陈橘又青的博客 5930

NSIDC海冰运动产品-速度矢量场图绘制(数据下载和处理--年、季节平均)【python/basemap】

入门级NSIDC海冰运动产品速度矢量场图绘制(数据下载和处理--年、季节平均)【python/basemap】

Mluoo的博客 2959

在Termux上安装Kali Linux 完整系统

介绍如何在Termux上安装Kali Linux 完整系统

蓑雨一生的博客 2万+

[算法]LeetCode每日一题--739每日温度(Java)

DailyChallenge 739. 每日温度 20200611 难度:中等 题目描述1 根据每日 气温 列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。 例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。 提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在

shinezzz的博客 885

Omnibox 2.11 NAS部署指南:家庭影音中枢的轻量化落地实践

家庭影音平台本质是本地化内容调度中枢,其核心在于聚合NAS媒体库、统一管理直播/IPTV/音频/视频等多源内容,并通过智能元数据匹配与硬解加速实现零门槛播放体验。技术原理上依赖Java轻量Web容器(Jetty)、SQLite嵌入式数据库双缓存架构,以及宿主机FFmpeg动态链接与HTTP/2直播代理治理能力。该方案显著降低4K播放卡顿、EPG加载失败、海报缺失等高频问题,适用于群晖、飞牛、绿联等主流NAS设备,尤其适配ARM64芯片与Realtek网卡等国产硬件生态。本文聚焦Omnibox 2.11在真实

weixin_30846347的博客 471

卧槽!这几个 Java 网站,有点刺激!

看到这个界面就爱了,里面包括大量的算法题,这些算法题是大厂面试必出的题型,据说掌握了这些算法题后,你可以吊打中国任何一家大厂,是不是真的咱也不知道,毕竟咱们没做过几道题。干净清爽,基本上所有的问题你在 StackOverflow 都能找到答案,你可以提出公共问题,也可以提出私人问题,甚至可以在 StackOverflow 上找工作。包含各种内容,总揽,编程语言,工具,特性,JVM 等,只不过语言有一些生硬,需要强大的英文功底,不过现在有谷歌翻译后我觉得这些问题也都不是问题了。现在重新好好复习手上的。

ssdrrg的博客 2920

避坑指南:Zabbix poller进程100%占用的5种常见原因及解决方案

本文深入剖析了Zabbix poller进程占用率高达100%的五大常见原因,包括监控项与进程数不匹配、不可达主机资源浪费、数据库性能瓶颈、监控项配置不合理以及版本缺陷。文章提供了从系统化诊断到针对性解决方案的完整指南,并重点介绍了如何通过优化zabbix_server.conf中的StartPollers等关键参数进行有效调优,帮助运维人员从根本上解决这一经典性能问题。

7z8x2c4v6b9的博客 251

Maven的下载安装配置教程(详细图文)

目录 一、简单了解一下什么是Maven 二、maven的下载 三、maven的安装 四、maven的环境变量配置 五、setting文件配置 六、开发工具配置Maven 一、简单了解一下什么是Maven Maven就是一款帮助程序员构建项目的工具,我们只需要告诉Maven需要哪些Jar 包,它会帮助我们下载所有的Jar,极大提升开发效率。 1.Maven翻译为“专家“, ”内行”的意思,是著名Apache公司下基于Java开发的开源项目。 2.Maven项目对象模型(POM)是一..

bakelFF的博客 12万+

【算法思考记录】力扣739. 每日温度【单调栈,Java,Python3,C++】

给定一个整数数组,表示每天的温度。要求返回一个数组answer,其中answer[i]是指对于第i天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用0来代替。通过上述解析,我们可以看到单调栈在解决特定类型问题时的高效性和实用性。希望本文的解析对您有所帮助。如有疑问或建议,欢迎留言交流。

未来就在脚下。 1172

cuRobo 入门教程(一)基于CUDA的机器人运动规划加速库

cuRobo是一款基于CUDA加速的机器人算法库,提供运动学计算、碰撞检测、轨迹优化等功能。该库采用并行优化技术,在GPU上实现高效运算,比现有方案快60倍。cuRobo支持多种机器人模型和环境表示,包含正向/逆向运动学、无碰撞轨迹生成、模型预测控制等核心算法,并可与IsaacSim等仿真平台集成。其特点包括:1) 支持多种碰撞检测方式(长方体/网格/深度图像);2) 提供批量环境处理和实时世界更新;3) 通过CUDA Graphs加速优化迭代;4) 在Jetson Orin等平台实现毫秒级运动规划。安装支

2506_90492529的博客 1931

【Java图解算法】739.每日温度

引言 生活中什么东西大的时候会变小,小的时候变大呢🐶? 答:当然是单调栈

qq_52416556的博客 1522

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

LeetCode 739 - 每日温度

摘要:LeetCode 739题要求计算每日温度后首次出现更高温度的天数差。使用单调栈(递减)优化解法,时间复杂度O(n),空间复杂度O(n)。核心思路是栈中存储未找到更高温度的日期索引,当遇到更高温度时弹出栈顶元素并计算天数差。Python/Java/Rust实现均遵循此逻辑,避免O(n²)的暴力解法。关键点包括栈存索引、维护递减性及正确初始化结果数组。

weixin_45980775的博客 1039

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

LeetCode 热题 HOT 100 (739. 每日温度)

基础知识:我们介绍了数组和栈的基本概念,并说明了什么是单调栈。题目思路:利用单调递减栈实现 O(n) 时间复杂度的解法。代码实现:详细解释了如何遍历温度数组并利用栈动态更新等待天数的答案。复杂度分析:说明了时间和空间复杂度。

chen的博客 1318

leetcode刷题记录(八十四)——739. 每日温度

示例 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] 提示: * 1 <= temperatures.length <= 105 * 30 <= temperatures[i] <= 100。天,下一个更高温度出现在几天后。

weixin_45994787的博客 1082

力扣739.每日温度

昨天发布了一篇单调栈的内容,今天再来巩固一下。

m0_71641460的博客 972

【LeetCode: 739. 每日温度 + 单调栈】

【LeetCode: 739. 每日温度 + 单调栈】给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。

Coder_ljw的博客 704

LeetCode、739. 每日温度【中等,单调栈】

LeetCode、739. 每日温度【中等,单调栈】 题目内容:给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。

每个人都是独一无二的,把握好自己的节奏,跟着自己的心走。 1286

[每日算法 - 阿里机试] leetcode739. 每日温度

给定一个整数数组temperatures,表示每天的温度,返回一个数组answer,其中answer[i]是指对于第i天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用0来代替。

一辉的博客 1069

Leetcode739. 每日温度

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。由于单调栈满足从栈底到栈顶元素对应的温度递减,因此每次有元素进栈时,会将温度更低的元素全部移除,并更新出栈元素对应的等待天数,这样可以确保等待天数一定是最小的。可以维护一个存储下标的单调栈,从栈底到栈顶的下标对应的温度列表中的温度依次递减。,按照以下步骤更新单调栈和答案,其中单调栈内的元素都是下标,括号内的数字表示下标在温度列表中对应的温度。

会流泪de鱼的博客 814

Java每日一题——>739. 每日温度(蛮力法,栈方法)

文章目录题目题解1(蛮力法)代码实现复杂度分析题解2(栈方法)代码实现复杂度分析 题目 这是LeetCode上的 [739,每日温度],难度为 [中等] 请根据每日 气温 列表 temperatures ,请计算在每一天需要等几天才会有更高的温度。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例 1: 输入: temperatures = [73,74,75,71,69,72,76,73] 输出: [1,1,4,2,1,1,0,0] 示例 2: 输入: temperatures = [30,

stormzhuo的博客 8098

739. 每日温度

题目: 739. 每日温度 题解: 1. 题解一:暴力求解 代码: 1. 代码一:暴力求解 public class code739 { // 解法1: 暴力求解 public static int[] dailyTemperatures(int[] T) { int len = T.length; int res[] = new int[len]; for(int i = 0; i < len; i++) {

dev_zyx的博客 495

LeetCode739 每日温度

LeetCode739 每日温度题目描述题解暴力解法思路复杂度时间复杂度我的方法思路复杂度时间复杂度空间复杂度代码动态规划思路复杂度时间复杂度空间复杂度代码单调栈思路复杂度时间复杂度空间复杂度代码 题目描述 请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。 例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1,

weixin_37669628的博客 324
上一篇: java数据结构与算法刷题-----LeetCode155. 最小栈
下一篇: java数据结构与算法刷题-----LeetCode503. 下一个更大元素 II
ydenergy_殷志鹏
博客等级 码龄7年 5887粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

ydenergy_殷志鹏

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

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

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

打赏作者

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

抵扣说明:

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

余额充值