【hot100】跟着小王一起刷leetcode -- 739. 每日温度

【hot100】跟着小王一起刷leetcode -- 739. 每日温度

  • 739. 每日温度
    • 题目解读
    • 思路
  • 代码
  • 总结

739. 每日温度

题目解读

739. 每日温度
在这里插入图片描述

老规矩,咱先看下题目。总结下来就是,你要返回一个answer数组,answer[i]中存储的应该是temperatures数组中比temperatures[i]大的第一个数的下标,如果不存在这样的数answer[i]置为0即可。

那么咱首先的思路是啥呢

第一个,必然是暴力解法,这不很简单,直接按个遍历temperatures中的数据,然后每遍历一个数的时候,就看看后面第一个比他大的数的下标是啥就行了。

这时候你兴致勃勃写完代码,然后提交上去,结果发现。。。。。。
在这里插入图片描述
在这里插入图片描述

那怎么让时间降下来呢

咱们考虑考虑,是不是做了无用功

例如哈,咱们在判断的位置为index的answer,也就是计算第一个比**temperatures[index]**的值的位置时,会和后面的值去比较。这使得我们的计算复杂度到了O(n*n),那有没有可能我在遍历到某个后续值的时候,就知道后面不会再有比他大的值了呢?这样子是不是复杂度就下来了。那该怎么弄呢。

很简单的思路,既然要知道后面的情况,肯定要从后往前遍历嘛?那该怎么做呢?

思路

咱们大概捋一下过程。最后一个下标的answer一定为0,这个没得说,因为都没有值了,肯定不如它大。

那咱们就可以直接从倒数第二个值开始处理了。当前,我们需要判断倒数第二值之后有没有更大的,如果有的话,就设置为更大值下标-当前下标,如果没有就设置为0。这个也很简单,就和倒数第一个比较下就可以了,然后设置就完事了。

到了倒数第三个的时候就不一样了,这时在处理的时候就需要多种讨论了。

接下来咱们来看看

第一种,后续值比当前值大,那没的说,直接设置answer为更大值下标-当前下标即可。
第二种,后续值等于当前值,这时候就有两种情况了。第一种,相等值下标的answer不为0,当前值answer就是相等值下标-当前下标+相等值下标的answer。第二种,相等值下标的answer为0,那当前也直接设置为0就可以了。
第三种,后续值小于当前值。这个时候不要无脑往后遍历,咱们要充分利用现有的信息。判断较小值的answer是为0,为0的话,直接设置当前answer为0即可;不为0,代表后面可能还有更大的。此时我们要一个个遍历嘛?

显然不是! 我们直接利用较小值的answer,跳转到较小值坐标+较小值的answer进行判断即可,因为中间的数据都比较小值小了,那怎么可能比当前值大呢。

就这样,循环即可,答案就出来了,并且时间省了很多。

代码

class Solution {public int[] dailyTemperatures(int[] temperatures) {int index = temperatures.length - 1;int[] answer = new int[temperatures.length];answer[temperatures.length - 1] = 0;for (int i = temperatures.length - 2; i >= 0; i--) {int after = i + 1;while (after < temperatures.length) {// temperatures[after ]比temperatures[i]大,这个时候直接赋值answer数组即可,并且可以停止了,因为我们已经找到了第一个大的。if (temperatures[after] > temperatures[i]) {answer[i] = after - i;break;}// temperatures[after]等于temperatures[i]if (temperatures[after] == temperatures[i]) {// 经过我们的遍历,i到after之间不存在比temperatures[i]大的值。这是因为如果存在这样的值,我们的上一个循环就停止了。// 并且after到after+answer[after]之间也不会存在比temperatures[after]大的值,因为answer[after]代表的是after之后第一个比temperatures[after]大的值。// 综合上述两点,answer[i]=after - i + answer[after];if (answer[after] != 0)answer[i] = after - i + answer[after];else// 如果answer[after]=0,代表i之后没有比temperatures[i]大的值,因此直接设置answer为0.answer[i] = 0;break;}// temperatures[after]小于temperatures[i]// 如果answer[after] 为0的话,都没有比temperatures[after]小的了,那肯定没有比temperatures[i]小的值,所以直接设置answer为0.if (answer[after] == 0) {answer[i] = 0;break;}// 这里大家可能看的有点迷,还能这么搞吗,我们来解释下// 来到这里,说明什么?// 如果temperatures[after]大于temperatures[i],第一个判断就截胡了,到不了这。同理temperatures[after]等于temperatures[i]也是如此。// 同样小于并且answer为0的情况我们也判断了,所以这里只有一种可能// 也就是temperatures[after]小于temperatures[i],并且answer还不为0,这个时候再结合咱们在思路的分析,直接这样跳转就可以了。after=after+answer[after];}}return answer;}
}

总结

在这里插入图片描述
时间复杂度还行,就是空间,emmm。。。。。。

这道题还是挺有意思的,大家一起讨论讨论。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/865512.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决ps暂存盘已满的问题

点击编辑->首选项->暂存盘 ps默认暂存盘使用的是c盘&#xff0c;我们改成d盘即可 然后重启ps

​​​​​​​​​​​​​​Spark Standalone集群环境

目录 Spark Standalone集群环境 修改配置文件 【workers】 【spark-env.sh】 【配置spark应用日志】 【log4j.properties】 分发到其他机器 启动spark Standalone 启动方式1&#xff1a;集群启动和停止 启动方式2&#xff1a;单独启动和停止 连接集群 【spark-shel…

详细介绍MySQL的索引(下)

索引的使用 同一条数据在未创建索引的情况下耗时&#xff1a; nick字段是未创建索引的 select * from t_user WHERE nick 邹丽;SHOW PROFILES; 耗时为&#xff1a; user_account字段创建了唯一索引 select * from t_user WHERE user_account 13781945844;SHOW PROFILES;…

PHP验证日本固定电话号码

日本电话号码格式众多&#xff0c;验证起来比较头大&#xff0c;现在咱们来一个简单的总结哈 为了简单起见&#xff0c;使用PCRE 函数preg_match通过匹配正则表达式来实现验证。 function checkGdTelLandline(string $str): int|false {return preg_match("/\A0(\d{1}[-…

安装 VisualSVN Server提示HTTP服务无法启动的问题解决

安装 VisualSVN Server 版本&#xff1a;VisualSVN-Server-5.4.0-x64 安装包在安装到一半的时候&#xff0c;弹窗提示&#xff1a;HTTP服务无法启动&#xff0c;网上找了一大堆&#xff0c;说是service里面更改用户为本地用户什么的都没用用&#xff0c;点右键也无法启动。 …

配置Uptime Kuma固定前缀

在做ICT集成项目时&#xff0c;遇到需要对现网接口进行拨测的需求。搜索后尝试使用开源的Uptime Kuma组件完成现网接口拨测。 但该项目有个问题就是默认不支持配置固定前缀&#xff0c;这对现网进行请求转发会造成较大的影响。通过查看该项目的github后找到了问题的解决方案。S…

web自动化(三)鼠标操作键盘

selenuim 键盘操作 import timefrom selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait from selen…

SQL语言基础特点、数据库系统

一、SQL的概述 &#xff08;1&#xff09; SQL全称&#xff1a; Structured Query Language&#xff0c;是结构化查询语言&#xff0c;用于访问和处理数据库的标准的计算机语言。 &#xff08;2&#xff09;SQL语言1974年由Boyce和Chamberlin提出&#xff0c;并首先在IBM公…

Leetcode秋招冲刺(专题10--12)

专题10&#xff1a;动态规划 题目509&#xff1a;斐波那契数&#xff08;NO&#xff09; 解题思路&#xff1a;动态五部曲 动态五部曲&#xff1a;这里我们用一个一维数组来保存递归的结果 确定dp数组以及下标的含义 dp[i]的定义为&#xff1a;第i个数的斐波那契数值是dp[i]…

韩语日常口语留学韩语旅游韩语口语柯桥语言培训

韩语每日一词打卡&#xff1a;행정적[행정적]【名词】行政 原文:나라는 항상 행정적 명령을 통해 경제운행을 조절합니다. 意思&#xff1a;国家经常通过行政命令去调节经济的运行。 【原文分解】 1、항상[항상]总是 &#xff0c;经常 2、나라[나라]国家 3、명령[명:녕]命令 …

项目2:API Hunter 细节回顾 -1

一. 接口调用 对于开发者来说&#xff0c;接口的调用应当是方便快捷的&#xff0c;而且出于安全考虑&#xff0c;通常会选择在后端调用第三方 API&#xff0c;避免在前端暴露诸如密码的敏感信息。 若采用 HTTP 调用方式&#xff1a; HttpClientRestTemplate第三方库&#xf…

视图库对接系列(GA-T 1400)四、视图库对接系列(本级)注册

视图库对接系列(本级)注册 在之前的步骤中&#xff0c;我们已经把项目大体的架构已经写出来了。那我们就来实现注册接口。 GA-T 1400中的步骤如下&#xff1a; 这里的话&#xff0c;我们实现的简单点&#xff0c; 我们不进去鉴权&#xff0c;也就是设备或平台找我们注册的话&…

Python高速下载及安装的十大必备事项与C++联调

选择正确的版本&#xff1a; 访问Python官网&#xff08;https://www.python.org/&#xff09;下载最新稳定版本&#xff0c;目前最新稳定版本为3.12.4 避免下载并安装Python 2.x版本&#xff0c;因为它已经停止维护。 选择适合操作系统的安装包&#xff1a; 根据你的操作系…

【笔记】太久不用redis忘记怎么后台登陆了

&#xff01;首先启动虚拟机linux的centos7 2.启动finalshell 我的redis启动在根目录用 redis-server redis.conf --启动 systemctl status redis --查看redis状态 是否active redis-cli -h centos的ip地址 -p 你要用的redis端口号&#xff08;默认为6379&#xff09; -a 你…

uboo对内存操作读写命令的基本使用

内存操作命令 直接对DRAM进行读写的操作,uboot常用的内存操作命令有md,nm,mm,mw,cp和cmp. md命令: 显示内存值 # md md - memory display Usage: md [.b, .w, .l, .q] address [# of objects] b:1个字节 byte w:2个字节 world l:4个字节 long of objects 以word 为单位的1…

MySQL:保护数据库

保护数据库 1. 用户1.1 创建用户1.2 查看用户1.3 删除用户1.4 修改密码 2. 权限2.1 授予权限2.2 查看权限2.3 撤销权限 之前都是介绍本地数据库而你自己就是数据库的唯一用户&#xff0c;所以不必考虑安全问题。但实际业务中数据库大多放在服务器里&#xff0c;你必须妥善处理好…

版本控制系统:Git 纯应用(持续更新);

基本操作 ctrl上行键&#xff1a;上次代码 本地仓库&#xff1a;Git init 新建文件&#xff1a;touch xxxx.xxx 查看状态&#xff1a;Git status 文件从工作区——暂存区&#xff1a;Git add ./文件名(.是通配符代表所有) 暂存区——仓库&#xff1a;Git commit -m &…

论文阅读之旋转目标检测ARC:《Adaptive Rotated Convolution for Rotated Object Detection》

论文link&#xff1a;link code&#xff1a;code ARC是一个改进的backbone&#xff0c;相比于ResNet&#xff0c;最后的几层有一些改变。 Introduction ARC自适应地旋转以调整每个输入的条件参数&#xff0c;其中旋转角度由路由函数以数据相关的方式预测。此外&#xff0c;还采…

使用 Ollama 时遇到的问题

题意&#xff1a; ImportError: cannot import name Ollama from llama_index.llms (unknown location) - installing dependencies does not solve the problem Python 无法从 llama_index.llms 模块中导入名为 Ollama 的类或函数 问题背景&#xff1a; I want to learn LL…

【postgreessql 】统计库中的所有表数量

在PostgreSQL中&#xff0c;你可以使用SQL查询来统计数据库中的所有表数量。这通常涉及到查询系统目录表&#xff0c;特别是 pg_catalog.pg_tables 表&#xff0c;它存储了关于数据库中所有表的信息。 SELECT COUNT(*) FROM information_schema.tables WHERE table_schema IN …