题目

最长湍流子数组

当 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]

输出:2code

示例 3:blog

输入:[100]

输出:1图片

提示:leetcode

1 <= A.length <= 40000

0 <= A[i] <= 10^9get

解题

分析:

很明显这里就有两个状态,数组上升与降低的两个须要考虑的主要状态以及相等这个断点状态

因此咱们要作的时在如下状况重置长度:

1.相等

2.连续上升

3.连续降低

实现起来不难,使用数据结构算法设计里的动态规划。

上升状态记为u,降低记为d,返回计数设为count

由于就算只有一个元素其初始长度也有1,因此赋值1.

int maxTurbulenceSize(int* arr, int arrSize) {

int count = 1;

int d = 1, u = 1;

而后对数组进行遍历

for (int i = 1; i < arrSize; i++) {

}

前面说到降低与上升交替才能进行增长,同时又要使得连续执行上升或者降低以后重置。

因此能够经过变量的赋值交换来实现状态转换,初值相等,当降低时就会做为初次湍流子数组加一,长度为2,在下一次若是是上升要在词基础上加一变成长度3,可是上升元素没变,因此应该基于降低计数加一,就是

if (arr[i - 1] < arr[i]) {

u = d + 1;

}

同理降低也须要从上升计数里加

if (arr[i - 1] > arr[i]) {

d = u + 1;

}

状态转换这样依然不行,由于这样不能限制住连续宿舍或者降低,咱们须要在上升以后再次上升会让数目重置变为2,由于上次执行的是u = d + 1;想要使得下次执行或者更屡次连续都保持为2,就须要每次上升对d从新赋值,重置为1;

if (arr[i - 1] < arr[i]) {

u = d + 1;

d = 1;

}

同理降低也是

if (arr[i - 1] > arr[i]) {

d = u + 1;

u = 1;

}

除去连续增减还有保持不变,这种状况对于两个都须要进行重置,因此就有如下逻辑:

else {

d = 1;

u = 1;

}

这样尚未完,咱们这时候获得的是u和d,咱们须要把这两个转换为计数count,因此在每次进行转换后须要选取二者之间的较大的值为最后的湍流子数组长度。

count = fmax(count, d);

count = fmax(count, u);

综合以上逻辑能够获得完整代码:

int maxTurbulenceSize(int* arr, int arrSize) {

int count = 1;

int d = 1, u = 1;

for (int i = 1; i < arrSize; i++) {

if (arr[i - 1] > arr[i]) {

d = u + 1;

u = 1;

} else if (arr[i - 1] < arr[i]) {

u = d + 1;

d = 1;

} else {

d = 1;

u = 1;

}

count = fmax(count, d);

count = fmax(count, u);

}

return count;

}

能够在如下程序直接运行测试:

#include

#include

#include

int maxTurbulenceSize(int* arr, int arrSize);

int main()

{

int arr[12]={9,4,2,10,7,8,8,1,9,19,323,11,};

int a=maxTurbulenceSize(arr,12);

printf("最长湍流数组大小为%d\n",a);

}

int maxTurbulenceSize(int* arr, int arrSize) {

int count = 1;

int d = 1, u = 1;

for (int i = 1; i < arrSize; i++) {

if (arr[i - 1] > arr[i]) {

d = u + 1;

u = 1;

} else if (arr[i - 1] < arr[i]) {

u = d + 1;

d = 1;

} else {

d = 1;

u = 1;

}

count = fmax(count, d);

count = fmax(count, u);

}

return count;

}

加油!

湍流参数计算c语言,力扣978.最长湍流子数组-C语言相关推荐

  1. 力扣978最长湍流子数组——Python解答

    我们采用DP解法 up = [1] * len(arr)down = [1] * len(arr)ans = 1for i in range(1, len(arr)):if arr[i] > a ...

  2. 最大子序列和问题c语言力扣,力扣

    力扣刷题-第1题:两数之和2021-05-24 22:03:30 目录 一.写在最前面 二.题目信息 解题思路 一.写在最前面 致愿意重新开始努力的自己: 希望你能够持续的坚持,不半途而废. 二.题目 ...

  3. LeetCode——978. 最长湍流子数组(Longest Turbulent Subarray)——分析及代码(Java)

    LeetCode--978. 最长湍流子数组[Longest Turbulent Subarray]--分析及代码[Java] 一.题目 二.分析及代码 1. 动态规划(一维数组) (1)思路 (2) ...

  4. Leetcode 978. 最长湍流子数组

    978. 最长湍流子数组 显示英文描述 我的提交返回竞赛 用户通过次数196 用户尝试次数229 通过次数200 提交次数567 题目难度Medium 当 A 的子数组 A[i], A[i+1], . ...

  5. leetcode 978. 最长湍流子数组(动态规划)

    978. 最长湍流子数组 当 A 的子数组 A[i], A[i+1], -, A[j] 满足下列条件时,我们称其为湍流子数组: 若 i <= k < j,当 k 为奇数时, A[k] &g ...

  6. 978. 最长湍流子数组

    链接:978. 最长湍流子数组 题解:https://leetcode-cn.com/problems/longest-turbulent-subarray/solution/zui-chang-tu ...

  7. 力扣刷题笔记:1438. 绝对差不超过限制的最长连续子数组(滑窗模板题,选择有序列表SortedList()数据类型就不会超时)

    题目: 1438.绝对差不超过限制的最长连续子数组 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 ...

  8. 力扣-718最长重复子数组(dp)

    力扣-718最长重复子数组 1.题目 给两个整数数组 nums1 和 nums2 ,返回 两个数组中 公共的 .长度最长的子数组的长度 . 示例 1: 输入:nums1 = [1,2,3,2,1], ...

  9. leetcode(力扣) 718. 最长重复子数组 1143. 最长公共子序列 1035. 不相交的线 (动态规划)

    文章目录 718. 最长重复子数组 题目描述 思路分析 完整代码 1143. 最长公共子序列 1035. 不相交的线: 这三道题思路基本一样,尤其是最后两道,代码都一样,一点不需要改的,所以放一起把. ...

最新文章

  1. 视频编码中的RC(rate control)是什么?码率控制 CBR (Constant Bit Rate)、VBR (Variable Bit Rate)
  2. 追求极致,饮水思源——记旷视与计算机竞赛的故事
  3. 02 | 日志系统:一条 SQL 更新语句是如何执行的
  4. Oracle PL/SQL语言初级教程
  5. LiveVideoStack线上分享第五季(十一):Open WebRTC Toolkit实时视频分析系统
  6. qt登录界面跳转_每天10分钟,木辛老师带你实战慕课软件开发:登录界面开发第2课...
  7. ssh连接不上linux虚拟机
  8. mysql 游标 navigate_MySQL游标的概念介绍和游标的使用讲解
  9. python在电脑哪可以找到_哪里可以找到比较靠谱的Python教程?
  10. [转载]qt信号signal和槽slot机制
  11. Minio 报错bucket name does not follow Amazon S3 standards
  12. Win11未安装Defender怎么办?解决Win11未安装Defender的方法
  13. java web导出excel_Web项目中数据导出Excel的实现方案
  14. filter和sessionListener实现session超时退出功能,过滤掉轮询请求
  15. H3CSE园区-LLDP技术
  16. OpenStack之VM东西南北向流量分析
  17. swfupload 无法加载_解决 KindEditor SWFUpload 批量上传检测用户登录状态的问题
  18. 文章集合--作者篇--上【转】
  19. 《领导沟通艺术与真实影响力》感想一
  20. Android实现简单的计算器

热门文章

  1. 2.4G遥控感应橱柜灯酒柜氛围灯
  2. NVT SDK 67X获取文件时长的一种方式
  3. Oracle产品服务和技术级别的介绍
  4. 【源码】数学研究者的Cleve_s实验室
  5. Sci-hub文献下载器
  6. WORD2003电子签名插件(支持手写、签章)
  7. 并发编程常见面试题Synchronized 相 关 问 题
  8. 计算机技术基础 vb 试卷及答案,云南师范大学《VB》期末试卷及答案
  9. 用 Delphi 学设计模式(一) 之 简单工厂篇 (原创)
  10. learnpythonthehardway.org_Python学习笔记LearnPythonHardWay