Leetcode. 739 每日温度

题目信息

LeetoCode地址: . - 力扣(LeetCode)

题目理解

题意很好理解,找到比每日温度更高的温度的已过天数的偏移量。如果找不到,则设为0。

最直观的想法是,从每一天开始向后一天一天找,直到找到更高温度的那一天。但是这种做法时间复杂度过高,有太多重复的操作,因此需要找更优的算法。

单调栈写法

容易发现,当遍历到第i天,温度为25度的前提下,如果第i+1天的温度比25度高,则第i天的结果很好计算,即是1. 如果第i+1天的温度没超过2度,则暂时得不到结果,那不如先将第i+1天的温度暂存起来,继续看第i+2天,如果温度继续走低,则继续看后一天。直到某一天温度比前一天高,假设第j天,则我们可以在暂存区里拿出来这一天,将结果求出。类似的,我们可以将暂存区里更之前的温度也拿出来和第j天对比,求出结果,直到暂存区里的温度都比第j天高,此时再将第j天的温度放入暂存区,重复该过程。

这个暂存区的存取总是后放入的先拿出来计算,很显然是栈的操作,所以这种做法就是单调栈做法。

在temperatures数组的长度为l的情况下,

时间复杂度: O(l), 因为我们对每一个温度只会有三种操作,放入栈,拿出栈,或者直接计算偏移量。

额外空间复杂度:O(l),我们需要一个大小为l的栈存放持续走低的温度数据,直到遇到更大的。

class Solution {public int[] dailyTemperatures(int[] temperatures) {int l = temperatures.length;int[] stack = new int[l];int stackTopIndex = -1;int[] result = new int[l];int i = 0;while (i < l) {if (stackTopIndex == -1) {stack[++stackTopIndex] = i++;} else {if (temperatures[i] <= temperatures[stack[stackTopIndex]]) {stack[++stackTopIndex] = i++;} else {result[stack[stackTopIndex]] = i - stack[stackTopIndex];stackTopIndex--;}}}return result;}
}

动态规划写法

如何能利用之前算过的数据来推导还未计算过的温度的偏移量呢?让我们分析一下。

很显然,最后一天的温度的更高温度偏移量为0,因为后面没有数据了。

倒数第二天的温度如果比最后一天低,则偏移量为1;相反,如果相同或者更高,则可以根据后一天的偏移量, 这里最后一天的偏移量是0,所以倒数第二天的偏移量也是0;

...

倒数第n天,类似的,先看n+1天,如果温度更高了,则偏移量为1; 相反,则看n+1天的偏移量之后的温度,更高了,则偏移量(n) = 1 + 偏移量(n+1);如果温度还是不够高,则继续看其偏移量,直到满足条件,或者到达最后一天。

这种根据已有的结果计算其他数据的思想就是动态规划。

在temperatures数组的长度为l的情况下,

时间复杂度: O(l), 看似我们有循环操作,但是它们搜索的数据空间没有重复,因此时间复杂度是O(l).

额外空间复杂度:O(1), 除了存放结果的集合,不需要其他额外的空间。

class Solution {
public int[] dailyTemperatures(int[] temperatures) {int[] dp = new int[temperatures.length];dp[temperatures.length-1] = 0;for (int i = temperatures.length-2; i>=0;i--) {if (temperatures[i] < temperatures[i+1]) {dp[i] = 1;} else {int j = i+1;while (j < dp.length && temperatures[j] <= temperatures[i]) {if (dp[j] == 0) {break;}j = j + dp[j];}if (j < dp.length && temperatures[j] > temperatures[i]) {dp[i] = j-i; }}}return dp;}
}

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

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

相关文章

fly-barrage 前端弹幕库(2):弹幕内容支持混入渲染图片的设计与实现

如果弹幕内容只支持文字的话&#xff0c;只需要借助 canvas 绘图上下文的 fillText 方法就可以实现功能了。 但如果想同时支持渲染图片和文字的话&#xff0c;需要以下几个步骤&#xff1a; 设计一个面向用户的数据结构&#xff0c;用于描述弹幕应该渲染哪些文字和图片&#x…

SpringBoot MultipartResolver原理

Spring Boot中的MultipartResolver是一个用于解析multipart/form-data类型请求的策略接口。这种类型的请求通常用于文件上传。Spring Boot中默认实现了两个MultipartResolver的接口&#xff1a;CommonsMultipartResolver和StandardServletMultipartResolver。 1. MultipartRes…

应急响应-常规处置办法

网站中被植入Webshell&#xff0c;通常代表着网站中存在可利用的高危漏洞&#xff0c;攻击者利用这些漏洞&#xff0c;将Webshell写入网站&#xff0c;从而获取网站的控制权。一旦在网站中发现webshell文件&#xff0c;可采取以下步骤进行临时处置。 入侵确定时间 通过在网站…

迅为RK3568开发板驱动开发指南-输入子系统

《iTOP-RK3568开发板驱动开发指南》更新&#xff0c;本次更新内容对应的是驱动&#xff08;第十三篇 输入子系统&#xff09;视频&#xff0c;帮助用户快速入门&#xff0c;大大提升研发速度。 第13篇-输入子系统目录 第1篇 驱动基础篇 第2篇 字符设备基础 第3篇 并发与竞争 …

解决gogs勾选“使用选定的文件和模板初始化仓库”报错500,gogs邮件发送失败,gogs邮件配置不生效,gogs自定义模板等问题

解决gogs勾选“使用选定的文件和模板初始化仓库”报错500,gogs邮件发送失败,gogs邮件配置不生效,gogs自定义模板等问题 前几天出了教程本地部署gogs&#xff0c;在后期运行时发现两个问题&#xff1a; 第一&#xff1a;邮件明明配置了&#xff0c;后台显示未配置&#xff0c;…

这家宠物品牌的内容运营怎么做的?太好玩儿了吧

养宠的朋友应该多多少少对“诚实一口”这个牌子有所耳闻&#xff0c;2018年诚实一口品牌正式立项&#xff0c;虽然不算经典品牌&#xff0c;但在国内也是小有名气的宠物品牌。今天媒介盒子想和大家聊的不是产品&#xff0c;而是想聊聊作为成立时间不长的国产宠粮品牌是如何凭借…

【数据结构】栈OJ题《用栈实现队列》(题库+解析+代码)

1. 前言 通过前面栈的实现和详解大家对队列应该有一定熟悉了&#xff0c;现在上强度开始做题吧 栈详解&#xff1a;http://t.csdnimg.cn/9Fsbs 本体的做题思路也可以参考上一篇文章&#xff0c;就是有一点点不同。 用队列实现栈&#xff1a;http://t.csdnimg.cn/V2qjW 2. …

小型内衣裤洗衣机哪个牌子好?四大顶尖内衣洗衣机测评分享

要知道&#xff0c;内衣裤可能会残留我们身体分泌的尿液&#xff0c;或者是没有擦干净的便便&#xff0c;以及其他的一些分泌物&#xff0c;据科学家研究发现&#xff0c;内衣裤是含有很多细菌和病毒的地方&#xff0c;如果将内衣裤和衣服放在一起洗&#xff0c;导致这些细菌附…

MyStringBuffer-自定义实现StringBuffer

在Java中&#xff0c;StringBuffer是一个可变的字符串类&#xff0c;它允许对字符串进行动态修改。与String类不同的是&#xff0c;StringBuffer对象的长度和内容都可以被改变。这使得StringBuffer在需要频繁修改字符串内容时比String更加高效。 StringBuffer类提供了许多方法…

Docker基础篇(六) dockerfile体系结构语法

FROM&#xff1a;基础镜像&#xff0c;当前新镜像是基于哪个镜像的 MAINTAINER &#xff1a;镜像维护者的姓名和邮箱地址 RUN&#xff1a;容器构建时需要运行的命令 EXPOSE &#xff1a;当前容器对外暴露出的端口号 WORKDIR&#xff1a;指定在创建容器后&#xff0c;终端默认登…

《Docker 简易速速上手小册》第4章 Docker 容器管理(2024 最新版)

文章目录 4.1 容器生命周期管理4.1.1 重点基础知识4.1.2 重点案例&#xff1a;启动并管理 Python Flask 应用容器4.1.3 拓展案例 1&#xff1a;调试运行中的容器4.1.4 拓展案例 2&#xff1a;优雅地停止和清理容器 4.2 容器数据管理与持久化4.2.1 重点基础知识4.2.2 重点案例&a…

C++力扣题目 42--接雨水 84--柱状图中最大的矩形

42. 接雨水 力扣题目链接(opens new window) 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1]输出&#xff1a;6解释&#xff…

一键解锁本地大型语言模型!Ollama框架让你轻松运行Gemma

想要在本地运行大型语言模型吗&#xff1f; Ollama框架提供了这样的机会。 这个框架是专为在Docker容器中部署LLM而设计的&#xff0c;简化了部署和管理流程。 安装Ollama后&#xff0c;你只需执行一条命令&#xff0c;即可在本地运行开源大型语言模型。 它将模型权重、配置…

Less预处理器教程

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学&#xff0c;可以点心心支持一下哈 一、Less介绍 less官方文档 lesscss.org/ less中文文档 less.bootcss.com/ less是一种css预处理器&#xff0c;它扩展了css语言&#xff0c…

C++ 设计模式:单例模式

一个类只允许存在一个对象 实现起来很简单&#xff0c;将构造函数设置为私有&#xff0c;拷贝构造等关闭然后提供一个静态接口返回实例即可 class A {A() {}A(const A&) delete;A& operator(const A&) delete; public:static A& get_val() {static A a;retu…

Docker复习笔记

Centos7安装Docker Docker官网:www.docker.com Docker官网仓库:hub.docker.com Docker文档是比较详细的 安装相关依赖 yum -y install gcc gcc-c yum install -y yum-utils 设置docker镜像仓库 yum-config-manager --add-repo https://download.docker.com/linux/centos/do…

OpenCV开发笔记(七十五):相机标定矫正中使用remap重映射进行畸变矫正

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://blog.csdn.net/qq21497936/article/details/136293833 各位读者&#xff0c;知识无穷而人力有穷&#xff0c;要么改需求&#xff0c;要么找专业人士&#xff0c;要么自己研究 红胖子(红模仿…

网络设备和网络软件

文章目录 网络设备和网络软件网卡交换机交换机的三个主要功能交换机的工作原理第二层交换和第三层交换交换机的堆叠和级联 路由器路由器工作原理 网关网关的分类 无线接入点(AP)调制解调器网络软件 网络设备和网络软件 网卡 网络接口卡又称网络适配器&#xff0c;简称网卡。网…

【计算机网络】数据链路层--以太网/MTU/ARP/RARP协议

文章目录 一、以太网1.以太网帧格式2.MAC地址3.局域网的转发原理 二、MTU1.什么是MTU2.MTU对IP协议的影响3.MTU对UDP影响4.MTU对于TCP协议的影响 三、ARP协议1.ARP协议的作用2.ARP数据报的格式3.ARP协议的工作流程 一、以太网 “以太网” 不是一种具体的网络, 而是一种技术标准…

论文阅读:《High-Resolution Image Synthesis with Latent Diffusion Models》

High-Resolution Image Synthesis with Latent Diffusion Models 论文链接 代码链接 What’s the problem addressed in the paper?(这篇文章究竟讲了什么问题&#xff1f;比方说一个算法&#xff0c;它的 input 和 output 是什么&#xff1f;问题的条件是什么) 这篇文章提…