LCP 61. 气温变化趋势

news2025/1/12 2:50:30

题目

力扣城计划在两地设立「力扣嘉年华」的分会场,气象小组正在分析两地区的气温变化趋势,对于第 i ~ (i+1) 天的气温变化趋势,将根据以下规则判断:

  • 若第 i+1 天的气温 高于 第 i 天,为 上升 趋势
  • 若第 i+1 天的气温 等于 第 i 天,为 平稳 趋势
  • 若第 i+1 天的气温 低于 第 i 天,为 下降 趋势

已知 temperatureA[i]temperatureB[i] 分别表示第 i 天两地区的气温。 组委会希望找到一段天数尽可能多,且两地气温变化趋势相同的时间举办嘉年华活动。请分析并返回两地气温变化趋势相同的最大连续天数。

即最大的 n,使得第 i~i+n 天之间,两地气温变化趋势相同。

示例 1:

输入: temperatureA = [21,18,18,18,31] temperatureB = [34,32,16,16,17]

输出:2

解释:如下表所示, 第 2~4 天两地气温变化趋势相同,且持续时间最长,因此返回 4-2=2

示例 2:

输入: temperatureA = [5,10,16,-6,15,11,3] temperatureB = [16,22,23,23,25,3,-16]

输出:3

提示:

2 <= temperatureA.length == temperatureB.length <= 1000
-20 <= temperatureA[i], temperatureB[i] <= 40

代码

完整代码

int temperatureTrend(int* temperatureA, int temperatureASize, int* temperatureB, int temperatureBSize){
    int dayOfSame = 0;
    int dayOfSameMax = 0;
    for (int i = 1; i < temperatureASize; i++)
    {
        if(((temperatureA[i] > temperatureA[i - 1]) - (temperatureA[i] == temperatureA[i - 1])) == ((temperatureB[i] > temperatureB[i - 1]) - (temperatureB[i] == temperatureB[i - 1])))
        {
            dayOfSame++;
            dayOfSameMax = dayOfSameMax > dayOfSame ? dayOfSameMax : dayOfSame;
        }
        else
        {
            dayOfSame = 0;
        }
    }
    return dayOfSameMax;
}

思路分析

代码通过一次遍历,使用滑动窗口来找到两地气温变化趋势相同的最长连续天数。具体做法是比较相邻两天的气温变化趋势,并记录相同趋势的最长连续天数。

拆解分析

  1. temperatureTrend函数
int temperatureTrend(int* temperatureA, int temperatureASize, int* temperatureB, int temperatureBSize){
    int dayOfSame = 0;
    int dayOfSameMax = 0;
    for (int i = 1; i < temperatureASize; i++)
    {
        if(((temperatureA[i] > temperatureA[i - 1]) - (temperatureA[i] == temperatureA[i - 1])) == ((temperatureB[i] > temperatureB[i - 1]) - (temperatureB[i] == temperatureB[i - 1])))
        {
            dayOfSame++;
            dayOfSameMax = dayOfSameMax > dayOfSame ? dayOfSameMax : dayOfSame;
        }
        else
        {
            dayOfSame = 0;
        }
    }
    return dayOfSameMax;
}

temperatureTrend函数的解析:

  • dayOfSame变量用于记录当前连续相同气温变化趋势的天数。
  • dayOfSameMax变量用于记录最大连续相同气温变化趋势的天数。
  • for循环从第2天(索引为1)开始遍历两个气温数组,比较相邻两天的气温变化趋势。
  • if条件判断两地气温变化趋势是否相同,若相同则dayOfSame加1并更新dayOfSameMax,若不同则重置dayOfSame为0。

复杂度分析

  • 时间复杂度:遍历了温度数组一次,时间复杂度为O(n)
  • 空间复杂度:只使用了常数个额外变量,空间复杂度为O(1)

一题多解

双指针法

完整代码

int temperatureTrend(int* temperatureA, int temperatureASize, int* temperatureB, int temperatureBSize){
    int left = 0;
    int right = 0;
    int dayOfSameMax = 0;
    while (right < temperatureASize - 1) {
        if (((temperatureA[right + 1] > temperatureA[right]) - (temperatureA[right + 1] == temperatureA[right])) == 
            ((temperatureB[right + 1] > temperatureB[right]) - (temperatureB[right + 1] == temperatureB[right]))) {
            right++;
            dayOfSameMax = (right - left) > dayOfSameMax ? (right - left) : dayOfSameMax;
        } else {
            left = ++right;
        }
    }
    return dayOfSameMax;
}

思路分析

这套代码用了双指针方法。

使用双指针方法维护一个滑动窗口,窗口的左右指针分别表示当前比较的开始和结束位置。若两地气温变化趋势相同,则右指针向右移动扩大窗口,否则左指针移动到右指针位置重置窗口。

拆解分析

  1. temperatureTrend函数
int temperatureTrend(int* temperatureA, int temperatureASize, int* temperatureB, int temperatureBSize){
    int left = 0;
    int right = 0;
    int dayOfSameMax = 0;
    while (right < temperatureASize - 1) {
        if (((temperatureA[right + 1] > temperatureA[right]) - (temperatureA[right + 1] == temperatureA[right])) == 
            ((temperatureB[right + 1] > temperatureB[right]) - (temperatureB[right + 1] == temperatureB[right]))) {
            right++;
            dayOfSameMax = (right - left) > dayOfSameMax ? (right - left) : dayOfSameMax;
        } else {
            left = ++right;
        }
    }
    return dayOfSameMax;
}

temperatureTrend函数的解析:

  • leftright两个指针用于维护当前滑动窗口的左右边界。
  • while循环用于遍历整个气温数组。
  • if条件用于比较当前窗口的气温变化趋势,若相同则扩大窗口并更新最大连续天数,若不同则重置窗口位置。

复杂度分析

  • 时间复杂度:遍历了温度数组一次,时间复杂度为O(n)
  • 空间复杂度:只使用了常数个额外变量,空间复杂度为O(1)

结果

一次遍历:

一次遍历

双指针:

双指针

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

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

相关文章

WPF 深入理解六、ControlTemplate控件模板

ControlTemplate 定义 控件模板用于来定义控件的外观、样式&#xff0c;还可通过控件模板的触发器(ControlTemplate.Triggers)修改控件的行为、响应动画等。 对与WPF当中,每个控件都是无外观的,这意味着我们可以完全自定义其可视元素的外观,但是不能修改其内部的行为&#xf…

springboot相关的一些知识

SpringBoot可以同时处理多少请求 SpringBoot默认的内嵌容器是Tomcat&#xff0c;所以SpringBoot可以同时处理多少请求取决于Tomcat。 SpringBoot中处理请求数量相关的参数有四个&#xff1a; server.tomcat.thread.min-spare&#xff1a;最少的工作线程数&#xff0c;默认大小…

AI简历:实习简历制作的智能解决方案是什么?

时间匆匆&#xff0c;我们又迎来了毕业季。大学生活丰富多彩&#xff0c;学业同样重要。毕业答辩对于每位大学生来说都是一道重要的门槛。回想起那些为了答辩准备而熬夜、焦虑的日子&#xff0c;那份努力至今难忘。 虽然答辩的准备工作可能相当繁琐&#xff0c;但幸运的是&…

【MySQL系列】MySQL 字符集的演变与选择

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【数据结构与算法】树的存储,森林 详解

树的几种存贮结构(双亲表示法、孩子表示法、孩子兄弟表示法)的优缺点&#xff0c;各自适应的运算。 双亲表示法&#xff1a; 优点&#xff1a;方便查找双亲及其祖先结点缺点&#xff1a; 查找孩子和兄弟结点比较费事未表示出结点之间的先后次序 适应的运算&#xff1a;查找节点…

基于国产飞腾2000制作的paddleocr hubserving服务docker镜像文件

paddleocr hubserving国产化飞腾、鲲鹏armv8 api服务镜像制作 一、编译paddle paddle官网说明在处理器飞腾2000和鲲鹏需要自行编译&#xff08;FT2000/Kunpeng 920 2426SK&#xff09; 如果自己编译可以参考官网飞腾/鲲鹏下从源码编译-使用文档-PaddlePaddle深度学习平台 二…

深入理解神经网络:BP神经网络、ANN、多层感知机、多层编码器和多层线性层

这里写目录标题 深入理解神经网络&#xff1a;BP神经网络、ANN、多层感知机、多层编码器和多层线性层**人工神经网络&#xff08;ANN&#xff09;****多层感知机&#xff08;MLP&#xff09;****BP神经网络&#xff08;反向传播神经网络&#xff09;****多层编码器****多层线性…

Mysqld数据库管理

一.Mysqld数据库类型 常用的数据类型 int 整型 无符号[0-4294967296&#xff08;2的32次方&#xff09;-1]&#xff0c;有符号[-2147483648&#xff08;2的31次方&#xff09;-2147483647]float单精度浮点 4字节32位double双精度浮点 8字节64位char固定长度的字符类型…

最新Springboot小程序医院核酸检测服务系统

采用技术 最新Springboot小程序医院核酸检测服务系统的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBootMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 页面展示效果 管理员页面 医护人员管理 普通管理员管理 接种进…

行车记录仪文件夹“0字节”现象解析与恢复策略

一、行车记录仪文件夹“0字节”现象描述 行车记录仪作为现代驾驶中的必备设备&#xff0c;其储存的视频数据对于事故记录和取证至关重要。然而&#xff0c;有时车主们可能会遇到这样一个问题&#xff1a;行车记录仪的某个文件夹内的文件突然变成了0字节大小&#xff0c;无法正…

Transformer的上下文学习能力是哪来的?

有理论基础&#xff0c;我们就可以进行深度优化了。 为什么 transformer 性能这么好&#xff1f;它给众多大语言模型带来的上下文学习 (In-Context Learning) 能力是从何而来&#xff1f;在人工智能领域里&#xff0c;transformer 已成为深度学习中的主导模型&#xff0c;但人们…

Python多语言欧拉法和预测校正器实现

&#x1f4dc;流体力学电磁学运动学动力学化学和电路中欧拉法 &#x1f4dc;流体力学电磁学运动学动力学化学和电路中欧拉法示例&#xff1a;Python重力弹弓流体晃动微分方程模型和交直流电阻电容电路 ✒️多语言实现欧拉法和修正欧拉法 在数学和计算科学中&#xff0c;欧拉…

用群辉NAS打造影视墙(Video Station篇)

目录 一、群辉套件Video Station 1、安装 2、进入系统 3、配置刮削器 4、获取TMDB网站API密钥 5、配置DNS (1)开启SSH (2)使用终端工具连接到NAS (3)修改hosts文件 (4)再次测试连接 6、设置目录 二、手机端APP设置 三、电视端APP 四、解决影视信息错误 N…

数仓开发那些事_番外

一位神州的正式员工&#xff08;没错&#xff0c;就是之前文章中出现的实习生&#xff09;&#xff1a;一闪&#xff0c;你今年涨工资了吗&#xff1f; 一闪&#xff1a;mad&#xff0c;一年辛苦到头只涨了500米 神州员工&#xff1a;你去年绩效不是优秀吗&#xff0c;怎么就涨…

洛杉矶裸机云服务器怎么用

洛杉矶裸机云服务器是一种结合了物理服务器性能和云服务灵活性的高性能计算服务。它为用户提供了高效、安全的计算和存储能力&#xff0c;特别适合需要大量数据处理和快速响应的应用。具体分析如下&#xff0c;rak部落小编为您整理发布洛杉矶裸机云服务器怎么用。 1. 硬件配置选…

openstack-同一物理机中透传不同GPU时的nova配置记录

文章目录 前言一、不同加速卡的型号信息二、计算节点增加配置信息1.nova-compute服务的nova.conf 三、控制节点增加配置信息1.nova-conductor服务的nova.conf2.nova-scheduler服务的nova.conf3.nova-api服务的nova.conf 四、准备实例模版五、进行测试&#xff0c;创建虚拟机、检…

从零开始:视频直播美颜SDK和API开发接入详解

在当今数字化时代&#xff0c;视频直播已经成为了社交媒体和在线娱乐的重要组成部分。而美颜功能作为视频直播的一个关键特性&#xff0c;可以显著提升用户体验&#xff0c;吸引更多观众参与。因此&#xff0c;了解如何从零开始开发和接入视频直播美颜SDK和API&#xff0c;对于…

领域驱动设计(DDD)微服务架构模式总结

part1. Domain Driven Design(Strategic Design,Tactical Design) Top Down focus on business or activityy domain Ubiquitous Language:统一语言 Tactical Design Tools&#xff1a;战术性设计工具 Implementing Domain Driven Design(Event storming,DDD in code) DDD总结…

mysql model_path longblob 类型文件操作

在 MySQL 中&#xff0c;如果你有一个表包含一个 LONG BLOB 类型的字段&#xff08;例如 model_path&#xff09;&#xff0c;你可以使用 SQL 查询来提取该字段中的二进制数据&#xff0c;并将其下载为文件。以下是一个完整的步骤来实现这个过程&#xff1a; 步骤1&#xff1a;…

虚拟3D沉浸式展会编辑平台降低了线上办展的门槛

在数字化浪潮的引领下&#xff0c;VR虚拟网上展会正逐渐成为企业展示品牌实力、吸引潜在客户的首选平台。我们与广交会携手走过三年多的时光&#xff0c;凭借优质的服务和丰富的经验&#xff0c;赢得了客户的广泛赞誉。 面对传统展会活动繁多、企业运营繁忙的挑战&#xff0c;许…