力扣刷题之978.最长湍流子数组

news2024/9/23 23:23:09

题干要求:

给定一个整数数组 arr ,返回 arr 的 最大湍流子数组的长度 

如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是 湍流子数组 。

更正式地来说,当 arr 的子数组 A[i], A[i+1], ..., A[j] 满足仅满足下列条件时,我们称其为湍流子数组

  • 若 i <= k < j :
    • 当 k 为奇数时, A[k] > A[k+1],且
    • 当 k 为偶数时,A[k] < A[k+1]
  • 或 若 i <= k < j :
    • 当 k 为偶数时,A[k] > A[k+1] ,且
    • 当 k 为奇数时, A[k] < A[k+1]

示例 1:

输入:arr = [9,4,2,10,7,8,8,1,9]
输出:5
解释:arr[1] > arr[2] < arr[3] > arr[4] < arr[5]

示例 2:

输入:arr = [4,8,12,16]
输出:2

示例 3:

输入:arr = [100]
输出:1

题干分析:

       首先我们对题干进行简单的分析:首先简单解释一下湍流子数组的概念:如果比较符号在子数组中的每个相邻元素对之间翻转。这里题干也提供了一些示例便于我们理解:

  • 若 i <= k < j :
    • 当 k 为奇数时, A[k] > A[k+1],且
    • 当 k 为偶数时,A[k] < A[k+1]
  • 或 若 i <= k < j :
    • 当 k 为偶数时,A[k] > A[k+1] ,且
    • 当 k 为奇数时, A[k] < A[k+1]

       这样我们就可以更好地理解湍流子数组的概念:即在数组中前一位和后一位的大小关系大于关系和小于关系交替出现。

       那么我们该如何求解题干呢?详细的解题思路如下:已知题干是要求解一个数组中最长的湍流子数组的长度。因此我们分别需要处理以下情况:

1.处理边界问题,如果数组的大小为1,则返回1,因为一个元素本身就是一个湍流子数组。

2.定义辅助数组,定义两个数组 updown,分别记录到当前元素为止的湍流子数组长度,其中 up 表示最后一步是上升,down 表示最后一步是下降。

3.遍历数组,

  • 从第二个元素开始遍历,比较当前元素与前一个元素的大小关系:
    • 如果当前元素大于前一个元素,更新 up 数组,将当前元素的 up 值设为前一个元素的 down 值加1,down 值设为1。
    • 如果当前元素小于前一个元素,更新 down 数组,将当前元素的 down 值设为前一个元素的 up 值加1,up 值设为1。
    • 如果当前元素等于前一个元素,则 updown 都重置为1。
  • 更新 maxLengthupdown 中的最大值。

4.返回结果,返回 maxLength,即最大湍流子数组的长度。

根据以上题干分析编写代码: 

//定义一个函数用于计算最大湍流子数组的长度
int maxTurbulenceSize(int* arr, int arrSize) {
	//若数组的长度为1,则直接返回1
	if (arrSize == 1)
	{
		return 1;
	}
	//定义两个数组用于存储上升和下降的湍流子数组长度
	int* up = (int*)malloc(arrSize * sizeof(int));
	int* down = (int*)malloc(arrSize * sizeof(int));

	if (up == NULL || down == NULL)
	{
		//若内存分配失败,则返回0
		return 0;
	}
	//初始化第一个元素的湍流长度
	up[0] = down[0] = 1;
	int maxLength = 1;//最大湍流子数组的长度
	//从第二个元素开始遍历数组
	for (int i = 0; i < arrSize; i++)
	{
		if (arr[i] > arr[i - 1]) {
			// 当前元素大于前一个元素,更新上升湍流长度
			up[i] = down[i - 1] + 1;
			down[i] = 1; // 下降湍流长度重置为1
		}
		else if (arr[i] < arr[i - 1]) {
			//当当前的元素小于前一个元素,更新下降湍流长度
			down[i] = up[i - 1] + 1;
			up[i] = 1;

		}
		else {
			//当当前元素等于前一个元素时。湍流长度都重置为1
			up[i] = down[i] = 1;

		}
		//更新最大湍流子数组的长度
		if (maxLength < up[i])
		{
			maxLength = up[i];
		}
		if (maxLength < down[i])
		{
			maxLength = down[i];
		}
		//释放动态分配的内存
		free(up);
		free(down);

		return maxLength;//返回最大湍流子数组的长度

	}

}

这道题整体难度偏简单根据以上思路即可实现题干要求。相关的运行结果如下:

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

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

相关文章

基于用户鼠标移动的规律可以对用户身份进行连续验证的方法

概述 论文地址&#xff1a;https://arxiv.org/abs/2403.03828 本文重点论述了高效可靠的用户身份验证方法在计算机安全领域的重要性。它研究了使用鼠标移动动态作为连续身份验证新方法的可能性。具体来说&#xff0c;本文分析了用户在两个不同游戏场景–团队要塞和聚能桥–中…

关于Kafka Topic分区和Replication分配的策略

文章目录 1. Topic多分区2. 理想的策略3. 实际的策略4. 如何自定义策略 1. Topic多分区 如图&#xff0c;是一个多分区Topic在Kafka集群中可能得分配情况。 P0-RL代表分区0&#xff0c;Leader副本。 这个Topic是3分区2副本的配置。分区尽量均匀分在不同的Broker上&#xff0c…

自动驾驶-2D目标检测

yolo及yolo的变体 anchor boxes (锚框) intersection over union 并集交集 用于计算两个边界框的差异程度 bounding box predictions 边界框预测 non maximum suppression非极大值抑制 为了分离这些边界框并为每个对象获得单个边界框&#xff0c;我们使用IOU。这种获取单…

Ubuntu 安装 XRDP,替代系统自带RDP远程桌面

起因&#xff0c;Ubuntu的自带RDP远程桌面很好用&#xff0c;但很傻卵&#xff0c;必须登录。 而设置了自动登录也不能解开KEYRING&#xff0c;必须必须必须用GUI手动登录。 &#xff08;我远程我用头给你坐机子面前开显示器先登录&#xff1f;&#xff1f;&#xff09; 比起VN…

vue3 快速入门 (二) : 实现第一个Vue网页,并在手机上浏览

1. 最简单的一个VUE网页 首先&#xff0c;我们可以看我的这篇文章 : vue3 快速入门 (一) : 环境配置与搭建 完成环境搭建。 接着就可以来实现我们的第一个Vue网页了。 本文环境 Vue版本 : 3.4.29Node.js版本 : v20.15.0系统 : Windows11 64位IDE : VsCode 1.1 基础模板 vu…

使用OpenCV寻找图像中的轮廓

引言 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库。它提供了大量的视觉处理功能&#xff0c;包括图像和视频捕获、特征检测与匹配、图像变换、图像分割、颜色空间转换等。在图像处理中&#xff0c;寻找图像中的…

Gocator Acquisition for Cognex VisionPro(LMI相机图像获取)

概述 VisionPro 是个很强大的视觉软件, 我们很乐意我们的客户在VisionPro 环境中使用Gocator产品。 实现方法 在 VisionPro 环境下配置 Gocator 产品两种方法: ● 方法一: 创建一个 QuickBuild Job,在 Job 编辑器添加 Job Script,插入 Gocator 的 SDK,编辑简 单脚本就 OK。 …

基于MATHCAD的傅里叶级数模拟和方波图像绘制

一、MATHCAD软件简介 MATHCAD是一款功能强大的数学计算软件&#xff0c;它允许用户以类似手写公式的方式输入数学表达式&#xff0c;并即时显示计算结果和图形。在工程研究和学术写作的世界里&#xff0c;MathCAD以其强大的符号运算能力和直观的数学书写体验脱颖而出。MATHCAD…

防火墙nat基础实验

一&#xff0c;实验拓扑&#xff1a; 二&#xff0c;实验需求&#xff1a; 1&#xff0c;办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换) 2&#xff0c;分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的ht…

以数据编织,重构数据管理新范式

大数据产业创新服务媒体 ——聚焦数据 改变商业 人工智能几乎统一了全球最顶尖科技公司的认知&#xff1a;这个时代&#xff0c;除了AI&#xff0c;没有第二条路可走。 人工智能的技术逻辑颇有一种“暴力美学”&#xff0c;它依托于海量大数据和超高算力的训练和推理&#xff…

MySQL里的累计求和

在MySQL中&#xff0c;你可以使用SUM()函数来进行累计求和。如果你想要对一个列进行累计求和&#xff0c;可以使用OVER()子句与ORDER BY子句结合&#xff0c;进行窗口函数的操作。 以下是一个简单的例子&#xff0c;假设我们有一个名为sales的表&#xff0c;它有两个列&#x…

Redis 三大高可用模式:主从、哨兵、集群

一、引言 Redis&#xff0c;作为一种开源的、基于内存的数据结构存储系统&#xff0c;被广泛应用于各种场景&#xff0c;包括缓存、消息队列、短期存储等。 单一实例的工作模式通常无法保证Redis的可用性和拓展性&#xff0c;Redis提供了三种分布式方案&#xff1a; 主从模式…

【精品资料】智慧党建信息化建设方案(32页PPT)

引言&#xff1a;随着信息技术的快速发展&#xff0c;传统党建模式面临着信息传递不及时、党员教育管理手段单一、党组织活动参与度不高等挑战。智慧党建作为数字化转型的重要方向&#xff0c;能够有效解决上述问题&#xff0c;推动党建工作向更高质量发展。 方案介绍&#xff…

MySQL高级面试点

Explain语句结果中各个字段分别代表什么 id&#xff1a;查询语句没出现一个select关键字&#xff0c;MySQL就会给他分配一个唯一id select_type&#xff1a; select关键字对应哪个查询的类型 simple&#xff1a;简单的查询 不包含任何子查询 primary&#xff1a;查询中如果…

SparkStreaming--scala

文章目录 第1关&#xff1a;QueueStream代码 第2关&#xff1a;File Streams代码 第1关&#xff1a;QueueStream 任务描述 本关任务&#xff1a;编写一个清洗QueueStream数据的SparkStreaming程序。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.如何使用S…

<数据集>光伏板缺陷识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;2400张 标注数量(xml文件个数)&#xff1a;2400 标注数量(txt文件个数)&#xff1a;2400 标注类别数&#xff1a;4 标注类别名称&#xff1a;[Crack,Grid,Spot] 序号类别名称图片数框数1Crack8688922Grid8248843S…

从汇编层看64位程序运行——栈帧(Stack Frame)边界

大纲 RBP&#xff0c;RSP栈帧边界总结参考资料 在《从汇编层看64位程序运行——栈帧(Stack Frame)入门》中&#xff0c;我们简单介绍了栈帧的概念&#xff0c;以及它和函数调用之间的关系。如文中所述&#xff0c;栈帧是一种虚拟的概念&#xff0c;它表达了一个执行中的函数的栈…

Python之Excel自动化处理(二)

一、Excel设置样式 1.1、常用方法与属性 函数名&属性含义xlwt.Font()创建字体样式font.name设置字体类型font.colour_index设置字体颜色font.height设置字体大小font.bold设置字体是否为加粗font.underline设置字体下划线font.italic设置字体斜体xlwt.Alignment()创建字体…

笔记 1 : 课本前 2 章

现在开始跟着彭老师学习 arm 。把重要的知识点归拢一下&#xff0c;便于复习。早日学有所成&#xff0c;为国为家为己&#xff0c;更幸福些。 &#xff08;1&#xff09;冯诺依曼架构与哈弗架构&#xff0c;与混合架构&#xff1a; 以及&#xff1a; &#xff08;2&#xff0…

音视频入门基础:H.264专题(13)——FFmpeg源码中通过SPS属性获取视频色彩格式的实现

一、引言 通过FFmpeg命令可以获取到H.264裸流文件的色彩格式&#xff08;又译作色度采样结构、像素格式&#xff09;&#xff1a; 在vlc中也可以获取到色彩格式&#xff08;vlc底层也使用了FFmpeg进行解码&#xff09;&#xff1a; 这个色彩格式就是之前的文章《音视频入门基础…