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

题干要求:

给定一个整数数组 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,则直接返回1if (arrSize == 1){return 1;}//定义两个数组用于存储上升和下降的湍流子数组长度int* up = (int*)malloc(arrSize * sizeof(int));int* down = (int*)malloc(arrSize * sizeof(int));if (up == NULL || down == NULL){//若内存分配失败,则返回0return 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 {//当当前元素等于前一个元素时。湍流长度都重置为1up[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.mzph.cn/bicheng/47339.shtml

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

相关文章

FPGA笔试

半加器和全加器的区别&#xff1a; 1、半加器不考虑输入的进位&#xff0c;称之为半加。 2、全加器反之&#xff0c;考虑进位。 SRAM/DRAM优缺点对比_sram和dram的主要区别及优缺点-CSDN博客 消除竞争冒险的方法 ①滤波电容&#xff1a;因为尖峰脉冲很窄&#xff0c;用很小的…

LM(Levenberg-Marquardt) PCG(预条件共轭梯度法)

文章目录 PCG共轭梯度法PCG算法步骤示例程序实现运行结果PCG vs LMPCG优势PCG劣势LM优势LM劣势综合比较对比示例代码结果与对比总结 PCG共轭梯度法 预条件共轭梯度法&#xff08;PCG&#xff09;是一种用于求解大规模稀疏线性系统 A x b Ax b Axb的迭代方法。它在求解对称正…

棱镜七彩上榜《嘶吼2024网络安全产业图谱》两大领域

7月16日&#xff0c;嘶吼安全产业研究院正式发布《嘶吼2024网络安全产业图谱》&#xff0c;棱镜七彩凭借在软件供应链安全领域出色的技术能力和优异的市场表现&#xff0c;上榜软件成分分析&#xff08;SCA&#xff09;、源代码安全两项细分领域。 据悉&#xff0c;本次《嘶吼2…

.net Excel的Winform控件 使用JSON公式代码

可以配合点击事件通过调接口的公式查询第三方平台的数据 using Feng.Json; using Feng.Script.CBEexpress; using Feng.Script.Method; using System; using System.Collections.Generic;namespace Feng.Script.FunctionContainer {[Serializable]public class JsonFunctionC…

1、PostgreSQL安装

PostgreSQL安装 1、postgreSQL介绍 PostgreSQL是一个免费的对象关系型数据库服务器&#xff08;ORDBMS&#xff09;&#xff0c;在灵活的BSD许可证下发行.PostgreSQL开发者把它念作post-gress-Q-L。PostgreSQL的Slogan是“世界上最先进的开源关系型数据库”。“开源界的Oracl…

成为CMake砖家(2): macOS创建CMake本地文档的app

大家好&#xff0c;我是白鱼。 使用 CMake 的小伙伴&#xff0c; 有的是在 Windows 上&#xff0c; 还有的是在 macOS 上。之前咱们讲了 windows 上查看 cmake 本地 html 文档的方式&#xff0c; 这篇讲讲 macOS 上查看 cmake 本地 html 文档的方法。 1. 问题描述 当使用 CMa…

防火墙--带宽管理

目录 核心思想 带宽限制 带宽保证 连接数的限制 如何实现 接口带宽 队列调度 配置位置 在接口处配置 带宽策略配置位置 带宽通道 配置地方 接口带宽、带宽策略和带宽通道联系 配置顺序 带块通道在那里配置 选项解释 引用方式 策略独占 策略共享 重标记DSCP优先…

Unity 关于Button无法高亮的问题

在Unity中&#xff0c;当我们新创建一个ButtonUI组件&#xff0c;并保持默认设置时&#xff0c;当我们把鼠标移动到Button上面时&#xff0c;Button是可以正常高亮的。但是当我们点击Button后再移动鼠标到Button处会发现Button无法高亮了。只有点击空白处后再移动鼠标到Button中…

文件乱码问题的一例分析

今天查看日志,遇到一种乱码问题, 终端展示的文件内容为: “\r\r\n” 尝试分析其原文. 使用xxd按照十六进制查看, 得到对应数据为: c3 8e c3 84 c2 bc c3 be c2 b2 c2 bb c2 b4 c3 a6 c3 94 c3 9a 0d 0d 0a 里面c3和c2大量存在,怀疑与两重编码有关, 使用NodeJS iconv-lite 做如…

软件游戏缺失concrt140.dll的解决方法,轻松搞定dll丢失问题

为了解决concrt140.dll文件缺失的问题&#xff0c;首先需要了解concrt140.dll文件的具体情况。只有在充分了解的基础上&#xff0c;才能采取有效的解决措施。下面&#xff0c;将详细介绍concrt140.dll文件及其解决方案。 一、了解concrt140.dll是什么 concrt140.dll 是微软的一…

SmartPipe新增功能:自动识别含间隙的低质量模型与自动处理超过180度的圆弧管路

自2022年12月SmartPipe上市以来&#xff0c;我一直在不断迭代和升级其轴线识别算法。对于客户反馈的无法自动转换的模型&#xff0c;我都视若珍宝&#xff0c;将其视为提升算法性能的绝佳机会。经过一年半的积累&#xff0c;SmartPipe的测试模型从最初的10个逐步迭代到近100个。…

使用MySQL WorkBench导出SQL脚本

参考: 在MySQL workbench 中导出sql脚本文件_mysql workbench自动保存的脚本在哪-CSDN博客 需要注意的是: 选择高级选项 这里不勾选&#xff0c;这样生成的INSERT是逐条的。将每个ROW合并为一个INSERT语句。 这里选择dump structure and data

画册制作攻略,助你成为视觉传达大师

在数字时代&#xff0c;画册作为一种传统而又充满魅力的视觉传达工具&#xff0c;依旧在各个领域扮演着重要角色。无论是在企业宣传、个人作品展示&#xff0c;还是艺术创作中&#xff0c;一本精美的画册都能让你的作品更具吸引力。那么&#xff0c;如何制作出一本引人入胜的画…

SQL Error: 1406, SQLState: 22001

SQL错误代码1406和SQLState 22001通常表示“列数据过长”错误。这意味着尝试插入或更新列中的值&#xff0c;但该值的长度超过了该列允许的最大长度。 解决此问题的几个步骤&#xff1a; 检查列长度&#xff1a; 确定引起错误的列。检查数据库架构中该列允许的最大长度。 验证…

STM32使用Wifi连接阿里云

目录 1 实现功能 2 器件 3 AT指令 4 阿里云配置 4.1 打开阿里云 4.2 创建产品 4.3 添加设备 5 STM32配置 5.1 基础参数 5.2 功能定义 6 STM32代码 本文主要是记述一下&#xff0c;如何使用阿里云物联网平台&#xff0c;创建一个简单的远程控制小灯示例。 完整工程&a…

创作模板三【创作模板】

xxx【创作模板三】 前言推荐说明最后 前言 2023年3月13日 以下内容源自《创作模板三》 仅供学习交流使用 推荐 无 说明 大三下的模板 专栏&#xff1a;计算机网络 【最后】的文案 因为确实不在意别人的看法&#xff0c;你了解的我不足万分之一 最后 你对我百般注视&am…

钓鱼攻击 - 基础学习

目录 0x00 基础1. 方式2. 目的3. 分类 0x01 外网钓鱼1. 目的2. 步骤 0x02 内网钓鱼1. 目的2. 步骤 0x03 钓鱼应急措施 0x00 基础 1. 方式 钓鱼攻击是一种典型的欺诈式攻击手段&#xff0c;攻击者通过伪装成可以信任的角色&#xff0c;利用电子邮件或其他通信渠道向被攻击者发送…

深度学习入门——误差反向传播

要正确理解误差反向传播法&#xff0c;我个人认为有两种方法&#xff1a;一种是基于数学式&#xff1b;另一种是基于计算图&#xff08;computational graph&#xff09; 前者是比较常见的方法&#xff0c;机器学习相关的图书中多数都是以数学式为中心展开论述的。因为这种方法…

老司机减分宝典助手-学法减分扣分题目及答案 #经验分享#经验分享#职场发展

学法减分其实就是把我们驾驶证上面的分数一分一分地找回来&#xff0c;为什么说是一分一分地找回来呢&#xff1f;因为必须先把违章处理完才可以&#xff0c;无论这辆车是不是你的&#xff0c;无论这辆车挂靠在谁的公司名下或者是单位名下&#xff0c;你都可以把这个分找回来&a…

电源模块企业该如何解决测试中的痛点问题?

根据研究发现&#xff0c;超过76%的企业在进行测试时会对产品质量、可靠性和测试速度这三项核心指标尤为重视。但是随着近几年的发展&#xff0c;目前的测试方法和措施对于这三项指标的测试远远无法达到企业的预期。被测产品的整体质量参差不齐、测试数据的可靠性以及测试的速度…