/**
* 978. 最长湍流子数组
* @author wsq
* @date 2020/10/20
当 A 的子数组 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]。
也就是说,如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是湍流子数组。
返回 A 的最大湍流子数组的长度。
示例 1:
输入:[9,4,2,10,7,8,8,1,9]
输出:5
解释:(A[1] > A[2] < A[3] > A[4] < A[5])
示例 2:
输入:[4,8,12,16]
输出:2
链接:https://leetcode-cn.com/problems/longest-turbulent-subarray
*/
package com.wsq.dp;
public class MaxTurbulenceSize {
/**
* 动态规划
* 1.确定状态
* f[i]表达以i结尾的最长湍流子数组的长度
* 最后一步:如果位置i与i-1的大小与位置i-2与i-1的大小关系一致时,f[i]可以看做在f[i-1]后追加一个元素
* 否则,i只能与i-1或者自身组成一个子数组
* 子问题:计算f[i-1]的最长湍流子数组的长度
* 2.定义转移方程
* f[i] = f[i-1] + 1 or 2 or 1
* 3.初始条件
* f[0] = 1
* 4.计算顺序:
* 由于后续状态依赖之前的状态,所以从小到大计算
* @param A
* @return
*/
public int maxTurbulenceSize(int[] A) {
int n = A.length;
if(n == 1){
return 1;
}
int[] f = new int[n];
f[0] = 1;
if(A[1] != A[0]){
f[1] = 2;
}else{
f[1] = 1;
}
int max = f[1];
for(int i = 2; i < n; i++){
if((A[i] > A[i-1] && A[i-2] > A[i-1]) || (A[i] < A[i-1] && A[i-2] < A[i-1])){
f[i] = f[i-1] + 1;
}else if(A[i] != A[i-1]){
f[i] = 2;
}else{
f[i] = 1;
}
if(f[i] > max){
max = f[i];
}
}
return max;
}
}
相关推荐
南京邮电大学电工电子实验(二)复习一
本文给电工电子实验(二)的复习进行一些知识点的提醒
leetcode 978. 最长湍流子数组(动态规划)
978. 最长湍流子数组 当 A 的子数组 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]。 也就是说,如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是湍流子数组。
数字IC后端PR阶段Innovus,ICC,ICC2修复short万能脚本分享
数字IC后端PR阶段Innovus,ICC,ICC2修复short万能脚本分享
Leetcode 978:最长湍流子数组(超详细的解法!!!)
当 A 的子数组 A[i], A[i+1], ..., A[j] 满足下列条件时,我们称其为湍流子数组: 若 i &amp;lt;= k &amp;lt; j,当 k 为奇数时, A[k] &amp;gt; A[k+1],且当 k 为偶数时,A[k] &amp;lt; A[k+1]; 或 若 i &amp;lt;= k &amp;lt; j,当 k 为偶数时,A[k] &amp;gt; A
DMR对讲机的基本概念理解
刚刚入手DMR对讲机,尚未成功联通。国内互联网上能找到的资料很少,大多数也都是一些DMR协议介绍之类的玩意,对实际操作没有指导意义。以下全部是这几天在网上研究各种资料得出的个人思考,如有错误请斧正。 相比与模拟通讯系统,DMR将语音信号转换为包的形式进行收发。将DMR对比成TCP/IP系统会更容易理解。 一般DMR对讲机都支持模数双通,说明DMR应该使用了跟FM同样的无线AP组件,只在解码上有区别。对讲机先使用DMR进行数字解码,解码成功则说明是数字信号,不成功则使用模拟方式再次进行解码。可以对等理解为
硬件基础(4):(6)高精度ADC设计中模拟地与数字地的划分与连接
在实际 PCB 设计中,**接地与布线**对于获得干净的参考电压和高精度 ADC 测量至关重要。下面详细阐述**如何在硬件层面减少数字噪声耦合到模拟电路、保障参考电压的稳定性**。
978. Longest Turbulent Subarray——array
题目分析:不是用动态规划,python3没有了cmp函数 class Solution(object): def cmp(self, a, b): if a > b: return 1 if a < b: return -1 if a == b: re...
基于N32G003的PMBus从机协议栈设计与STM32F103模拟I2C主机通信实战
本文详细介绍了基于N32G003微控制器设计PMBus从机协议栈,并与STM32F103模拟I2C主机进行通信的实战方案。重点阐述了中断驱动架构、命令解析、CRC8优化及超时恢复机制,实现了在70kHz速率下稳定可靠的工业电源管理通信,适用于服务器电源、通信基站等成本敏感应用场景。
动态规划24:978. 最长湍流子数组
详解动态规划24:978. 最长湍流子数组(子数组问题)
XMind文件解析黑科技:用Python实现版本自适应读取(兼容2010-2024)
本文深入探讨了如何利用Python实现XMind文件的版本自适应解析,兼容从2010到2024年的各版本。通过分析XMind文件作为ZIP压缩包的本质,文章提供了智能探测文件内部结构(JSON或XML)并构建健壮读取逻辑的完整方案,有效解决了版本兼容性难题,并演示了将解析数据转换为PlantUML等下游应用的实战案例。
【ArcGIS Engine二次开发】入门基础(2):ArcGIS开发方式(VBA、DLL、Add-in、Engine)对比
文章目录2.1 使用VBA进行桌面软件开发2.1.1 VBA开发方式2.1.1 VBA代码的安全性2.2 使用DLL进行桌面软件开发2.2.1 DLL开发方式2.2.2 DLL功能的应用部署2.3 使用Add-in进行桌面软件开发2.4 使用ArcGIS Engine构建独立应用程序 对于桌面GIS应用来说,ArcGIS平台不仅提供了用于开发独立运行的GIS应用软件的二次开发工包ArcGIS Engine,还提供了对ArcGIS Deskop桌面软件进行扩展的开发的话,在开发个具体的GIS 行业应用软件时
【算法练习】leetcode每日一题/动态规划 978. 最长湍流子数组+1186. 删除一次得到子数组最大和
978. 最长湍流子数组 难度中等108 当A的子数组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]。 也就是说,如果比较符号在子数组中的每个相邻元素对之间翻...
扰动观察法MPPT控制器simulink仿真
最大功率点跟踪(MPPT)控制器对于光伏(PV)系统至关重要,因为它可以确保系统在所有操作条件下都能从光伏阵列中提取最大功率。扰动观察法(P&O)是一种广泛使用的MPPT算法,因为它简单且易于实现。本文介绍了P&O MPPT控制器的Simulink仿真,并分析了其性能。
leecode 978. 动态规划:最长湍流子数组
1.题目描述 当 A 的子数组 A[i], A[i+1], …, A[j] 满足下列条件时,我们称其为湍流子数组: 若 i<=k<ji <= k < ji<=k<j,当 kkk 为奇数时, A[k]>A[k+1]A[k] > A[k+1]A[k]>A[k+1],且当 k 为偶数时,A[k]<A[k+1]A[k] < A[k+1]A[k]<A[k+1]; 或 若 i<=k<ji <= k < ji<=k<
VC中sqlite的使用
在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示
Probability and Statistics - 4th edition
Probability and Statistics - 4th edition
动态规划-子数组系列——978.最长湍流子数组
【代码】动态规划-子数组系列——978.最长湍流子数组。
ET2012新版免狗免安装绿色软件
ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,
978. 最长湍流子数组 动态规划
当 A的子数组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]。 也就是说,如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是湍流子数组。 返回 A 的最大...
大中型超市收银系统(可直接运行)
光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开
LeetCode978. 最长湍流子数组(动态规划)
1、题目描述 https://leetcode-cn.com/problems/longest-turbulent-subarray/ 当 A的子数组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为奇数时,...
0动态规划中等 LeetCode978. 最长湍流子数组
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 : 当
leetcode978_最长湍流子数组_滑动窗口或动态规划
1. 首先假设A[right]和A[right-1]之间的关系是大于小于等于分别为1,-1,0. 这样问题转化为最长的连续变换符号的1,-1,1,-1.......字符串长度有多长. 2. 然后我们可以用滑动窗口方法来做, 注意当条件不满足的时候再来计算,也就是先找到最长的可行解. 3. 依旧是套用滑动窗口模板. class Solution { public: int com...
最长端流子数组--动态规划
leetcode 978 最长端流子数组 当 A 的子数组 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]。 也就是说,如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是湍流
978. 最长湍流子数组(滑动窗口、动态规划)
一、题目描述 当 A 的子数组 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]。 也就是说,如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是湍流子数组。 返回 A
Leetcode 978. 最长湍流子数组 (动态规划)
这道题目如果用双指针的思路,边界会比较多,比较麻烦,建议采用动态规划 定义f[i]表示以i结尾的最长摆动序列,在转移的时候,显然有两种情况,分别对应上升和下降,因此想到定义两个状态,然后交替转移,可以用滚动数组将空间优化到O(1) class Solution { public: int maxTurbulenceSize(vector<int>& arr) { // f[i] 表示以i结尾的上升的湍流数组 // g[i] 表示以i...
Leetcode-滑窗/动态规划-978. 最长湍流子数组
题目: 题解: 方法一:模拟题意,分为奇偶两种情况,计算最大湍流,并用滑窗模板解题: class Solution { public int maxTurbulenceSize(int[] arr) { int maxlen1 = sublen(arr,1); int maxlen2 = sublen(arr,0); return Math.max(maxlen1,maxlen2); } public int s
leetcode 978.最长湍流子数组
leetcode 978.最长湍流子数组 题干 当 A 的子数组 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]。 也就是说,如果比较符号在子数组中的每个相邻元素对之间翻转,则
LeetCode——978. 最长湍流子数组(Longest Turbulent Subarray)——分析及代码(Java)
LeetCode——978. 最长湍流子数组[Longest Turbulent Subarray]——分析及代码[Java]一、题目二、分析及代码1. 动态规划(一维数组)(1)思路(2)代码(3)结果2. 动态规划(单个数字)(1)思路(2)代码(3)结果三、其他 一、题目 当 A 的子数组 A[i], A[i+1], …, A[j] 满足下列条件时,我们称其为湍流子数组: 若 i <= k < j,当 k 为奇数时,A[k] > A[k+1],且当 k 为偶数时,A[k] <
❤️思维导图整理大厂面试高频数组16: 最长湍流子数组的动态规划构建 和 滑动窗口解法, 力扣978❤️
此专栏文章是对力扣上算法题目各种方法的总结和归纳, 整理出最重要的思路和知识重点并以思维导图形式呈现, 当然也会加上我对导图的详解. 目的是为了更方便快捷的记忆和回忆算法重点(不用每次都重复看题解), 毕竟算法不是做了一遍就能完全记住的. 所以本文适合已经知道解题思路和方法, 想进一步加强理解和记忆的朋友, 并不适合第一次接触此题的朋友(可以根据题号先去力扣看看官方题解, 然后再看本文内容). 关于本专栏所有题目的目录链接, 刷算法题目的顺序/注意点/技巧, 以及思维导图源文件问题请点击此链接. 想进大厂.
2962



被折叠的 条评论
为什么被折叠?



