LCP 61. 气温变化趋势

题目

力扣城计划在两地设立「力扣嘉年华」的分会场,气象小组正在分析两地区的气温变化趋势,对于第 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.mzph.cn/bicheng/31287.shtml

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

相关文章

Flash页、扇区、块的区别

文章目录 前言玩转Flash的小知识一、页(Page)二、扇区(Sector)三、块(Block)总结存储基础知识 瑞萨芯片简介(片上资源分配)和工具链使用 前言 FLASH 存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速…

用java写一个二叉树翻转

class TreeNode {int val;TreeNode left, right;TreeNode(int val) {this.val val;left right null;} }public class BinaryTree {TreeNode root;// 递归翻转二叉树public TreeNode invertTree(TreeNode root) {if (root null) {return null;}// 递归翻转左子树和右子树Tre…

SpringBoot测试实践

测试按照粒度可分为3层&#xff1a; 单元测试&#xff1a;单元测试&#xff08;Unit Testing&#xff09;又称为模块测试 &#xff0c;是针对程序模块&#xff08;软件设计的最小单位&#xff09;来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中…

【自动驾驶】ROS小车系统、运动底盘的运动学分析和串口通信控制

文章目录 小车组成轮式运动底盘的组成轮式运动底盘的分类轮式机器人的控制方式感知传感器ROS决策主控ROS介绍ROS的坐标系ROS的单位机器人电气连接变压模块运动底盘的电气连接ROS主控与传感器的电气连接ROS主控和STM32控制器两种控制器的功能运动底盘基本组成电池电机控制器与驱…

WPF将dll文件嵌入到exe文件中

WPF将dll文件嵌入到exe文件中 第一步&#xff1a;打开.csproj文件&#xff0c;在Import节点后添加如下代码&#xff1a; <Target Name"AfterResolveReferences"><ItemGroup><EmbeddedResource Include"(ReferenceCopyLocalPaths)" Condit…

AI视频教程下载-用LangChain 开发 OpenAI、 LLAMA 、 Gemini 等AI应用

LangChain MasterClass- OpenAI LLAMA 2 GPT LLM Apps__ Python&#xff08;LangChain MasterClass-Develop 7 OpenAI LLM Apps using Python&#xff09; 探索LangChain、Pinecone、OpenAI、LLAMA 2及Google Gemini Pro LLM在现实世界中的应用。构建AI应用——拥抱脸&#xff…

写一个可以批量修改图片分辨率的工具

说在前面 &#x1f388;在视觉内容至关重要的今天&#xff0c;图片尺寸的调整对于网站加载速度和用户体验有着直接影响。本文介绍的Node.js工具&#xff0c;通过简单的命令行操作&#xff0c;允许用户批量调整图片尺寸&#xff0c;支持单张图片和整个目录的操作&#xff0c;提供…

逆向学习网络篇:数据传输和交换过程

本节课在线学习视频&#xff08;网盘地址&#xff0c;保存后即可免费观看&#xff09;&#xff1a; ​​https://pan.quark.cn/s/3d8ae684d031​​ 网络技术是现代信息社会的基础&#xff0c;它涉及数据传输、交换和存储等多个方面。本文将深入探讨网络中的数据传输和交换过程…

【机器学习】---无监督学习

引言 在机器学习的广阔领域中&#xff0c;无监督学习扮演着至关重要的角色。不同于有监督学习&#xff0c;无监督学习处理的是没有标签的数据集&#xff0c;即我们不知道每个数据点的正确答案或分类。然而&#xff0c;这并不意味着无监督学习无法为我们提供有价值的信息。相反…

DDOS攻击会造成哪些问题

DDOS攻击是我们日常生活中比较常见的一种网络攻击&#xff0c;DDOS攻击的全称为分布式拒绝服务攻击&#xff0c;游戏行业则是DDOS攻击的重灾区&#xff0c;本文主要来给大家讲解一下DDOS攻击会给业务造成哪些问题吧&#xff01; DDOS攻击是攻击者利用大量的恶意请求占用了目标服…

AI音乐:创新引擎还是创意终结者?

✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您的点赞、关注、收藏、评论&#xff0c;是对我最大…

利用nodejs实现图片上传后端,并实现回显

![[Pasted image 20240617093358.png]] 首先准备好前端简单的页面结构 <h1>图片上传</h1> <img class"img" src"" /> <form action""><input id"input" type"file" /><button id"bt…

学生管理系统更新(账号系统)

展示 头文件 #pragma once #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h>//输入输出函数 #include<stdlib.h>//动态分配函数和随机函数 #include<windows.h>//控制台程序&#xff0c;用来实现cmd指令&#xff0c;title指令&#xff0c;cls指令等等 …

Ollama深度探索:AI大模型本地部署的全面教程

目录 引言一、Ollama概述1、定义与定位2、核心功能3、技术优势4、应用场景 二、安装与配置1、系统要求2、安装方法3、配置指南4、启动Ollama服务 四、快速开始1、启动Ollama2、部署运行模型3、REEST API 五、自定义模型1、定制化的必要性2、使用Modelfile定制模型3、参数调整4、…

IPSEC VPN

IPSEC VPN IPSEC是为IP网络提供安全性的协议和服务的集合,是一种协议簇&#xff0c;一个基于网络层&#xff0c;应用密码学的安全信息协议组。一开始TCP/IP 没有考虑到信息的安全传输。IPSEC协议簇诞生的意义就是保证TCP/IP的安全传输。 伪头部校验&#xff1a;TCP再校验的时…

升级到tomcat10和Java 21后,idea控制台system.out.println输出中文乱码问题

最近一次性从tomcat 9升级到tomcat 10&#xff0c;同时Java sdk也从1.8升级到21。 升级过程中&#xff0c;当然会遇到很多问题&#xff0c;但是控制台输出中文乱码问题&#xff0c;着实折腾了很久。 1、尝试各种方法 网上说的很多通用方法都试过了&#xff0c;就是不生效。包…

机器学习:Transformer框架理论详解和代码实现

机器学习&#xff1a;Transformer框架理论详解和代码实现 Transformer是一种基于自注意力机制的神经网络架构&#xff0c;被广泛应用于自然语言处理领域&#xff0c;特别是机器翻译任务。在本篇博文中&#xff0c;我们将首先介绍Transformer的理论知识&#xff0c;然后通过代码…

前端:Element UI 与 Vuetify 的选择

vuetify优势 1、多端适配&#xff0c;Vuetify完全按照Material设计规范进行开发&#xff0c;每一个组件都经过精心设计&#xff0c;具有模块化、响应式和优秀的性能。 使用独特和动态的 布局 自定义您的应用程序&#xff0c;并使用 SASS 变量 自定义您的组件的样式。只需要做下…

hive与dolphin笔记

文章目录 一、hive相关1. 如何增加列2. 如何查看表的具体列的数据类型3. 如何drop一个表4. 如何从某个时间点获取它30天前的日期 二、dolphin笔记1. 如何增加前置节点依赖 一、hive相关 1. 如何增加列 alter table your_table_name add columns (your_column_name varchar(25…

【CT】LeetCode手撕—236. 二叉树的最近公共祖先

目录 题目1- 思路2- 实现⭐236. 二叉树的最近公共祖先——题解思路 3- ACM实现 题目 原题连接&#xff1a;236. 二叉树的最近公共祖先 1- 思路 模式识别 模式1&#xff1a;二叉树最近公共祖先 ——> 递归 判断 递归思路&#xff0c;分情况判断&#xff1a; 1.参数及返…