leetcode-978. 最长湍流子数组
leetcode-978. 最长湍流子数组
Points
- 数组
 - DP
 
题意
当
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示例 3:
输入:[100]
输出:1
算法 1---own---滑动窗口
用时: 100ms
复杂度:O(n)
- 遍历字符串(从索引1开始),如果该元素值不等于前一元素值,继续;
 - 对flag赋初值(true/false)
 - 向后继续扫描(每次flag取反),如果后面元素和前一元素值大小关系判定满足flag,计数器计数;否则与之前计数器值比较,去较大值。计数器复位成1;
 - 重新向后扫描。
 - 遍历数组结束,返回计数器值。
 warning:注意判定条件
code_1(*.cpp)
 class Solution {
 public:
     int maxTurbulenceSize(vector<int>& A) {
         int ans = , count = ;
         bool flag;
         for(int i=; i<A.size();)
         {
             count = ;
             if(A[i] != A[i-])
             {
                 flag = (max(A[i], A[i-]) == A[i]);
                 while(i<A.size() && flag == (max(A[i], A[i-]) == A[i]) && (A[i] != A[i-1]))//不相等条件!!!
                 {
                     count++;
                     flag = !flag;
                     i++;
                 }
                 if(count > ans)
                 {
                     ans = count;
                 }
             }
             else
             {
                 i++;
             }         }
         return ans;
     }
 };
算法 2---from rx782
用时: 100ms
复杂度:O(n)
该算法非常妙,行数贼少, 暂时没看太懂,明白的小伙伴可以留言讨论。
code_2(*.cpp)
 class Solution {
 public:
     int maxTurbulenceSize(vector<int>& A) {
         int odd = , even = ;
         int ans = ;
         for (int i = ; i < A.size(); i++)
         {
             int new_odd = (A[i] > A[i - ] ? even +  : );
             int new_even = (A[i] < A[i - ] ? odd +  : );
             if (new_odd > ans)
                 ans = new_odd;
             if (new_even > ans)
                 ans = new_even;
             odd = new_odd;
             even = new_even;
         }
         return ans;
     }
 };
leetcode-978. 最长湍流子数组的更多相关文章
- LeetCode978. 最长湍流子数组
		
问题:978. 最长湍流子数组 当 A 的子数组 A[i], A[i+1], ..., A[j] 满足下列条件时,我们称其为湍流子数组: 若 i <= k < j,当 k 为奇数时, A[ ...
 - LeetCode:长度最小的子数组【209】
		
LeetCode:长度最小的子数组[209] 题目描述 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组.如果不存在符合条件的连续子数组,返回 ...
 - 【LeetCode】1438. 绝对差不超过限制的最长连续子数组 Longest Continuous Subarray With Absolute Diff Less Than or Equal t
		
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 滑动窗口 日期 题目地址:https://leetco ...
 - 力扣1438. 绝对差不超过限制的最长连续子数组-C语言实现-中等难度
		
题目 传送门 文本 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条 ...
 - LeetCode 1248. 统计「优美子数组」
		
地址 https://www.acwing.com/solution/leetcode/content/5801/ 题目描述给你一个整数数组 nums 和一个整数 k. 如果某个子数组中恰好有 k 个 ...
 - LeetCode 581. 最短无序连续子数组(Shortest Unsorted Continuous Subarray)
		
581. 最短无序连续子数组 581. Shortest Unsorted Continuous Subarray 题目描述 给定一个整型数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序 ...
 - Leetcode 209.长度最小的子数组 By Python
		
给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组.如果不存在符合条件的连续子数组,返回 0. 示例: 输入: s = 7, nums = [2, ...
 - Leetcode 581.最短无序连续子数组
		
最短无序连续子数组 给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序. 你找到的子数组应是最短的,请输出它的长度. 示例 1: 输入: [2, ...
 - LeetCode 209. 长度最小的子数组(Minimum Size Subarray Sum)
		
题目描述 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组.如果不存在符合条件的连续子数组,返回 0. 示例: 输入: s = 7, nums ...
 
随机推荐
- 安装MySQL时候最后一步报无法定位程序输入点fesetround于动态链接库MSVCR120.dll
			
今天在装MySQL时到最后一步出现了一个问题[报无法定位程序输入点fesetround于动态链接库MSVCR120.dll]这是由什么原因引起的呢,其实是缺少一个vcredist_x64.exe插件 ...
 - 网站后台搭建--springboot项目是如何创建的
			
在创建项目之前先说一下ide的问题,从学习软件开始一直到一个月之前,开发用的IDE都是Eclipse,对,就是这个远古时代的开发工具,在使用过程中虽然总是遇到各种bug,但内心里还是存在着一丝理解的想 ...
 - react-create-app 构建react项目的流程以及需要注意的地方
			
Hello 小伙伴们,如果觉得本文还不错,记得给个 star , 小伙伴们的 star 是我持续更新的动力!GitHub 地址 React 系列文章代码地址 一 目录 不折腾的前端,和咸鱼有什么区别 ...
 - PHP取得json前面有乱码(去除文件头部BOM)
			
curl请求接口时,返回结果如下: {} 想把json转换成数组或者对象,但是用json_decode返回是空的,然后用var_dump打印了一下返回结果,发现结果如下: ) 发现前面多了两个字符,因 ...
 - mysql 开发基础系列12 选择合适的数据类型(上)
			
一. char 与varchar比较 在上图的最后一行的值只适用在"非严格模式",关于严格模式后面讲到.在“开发基础系列4“ 中讲到CHAR 列删除了尾部的空格.由于char是固定 ...
 - mysql数据库单表只有一个主键自增id字段,ibatis实现id自增
			
mysql数据库单表只有一个主键自增id字段,ibatis实现id自增 <insert id="autoid"> insert into user_id ...
 - 深入理解 JavaScript 异步系列(1)——基础
			
前言 2014年秋季写完了<深入理解javascript原型和闭包系列>,已经帮助过很多人走出了 js 原型.作用域.闭包的困惑,至今仍能经常受到好评的留言. 很早之前我就总结了JS三座大 ...
 - leetcode — valid-number
			
/** * * Source : https://oj.leetcode.com/problems/valid-number/ * * * Validate if a given string is ...
 - 【转载】LINUX 和 WINDOWS 内核的区别
			
LINUX 和 WINDOWS 内核的区别 [声明:欢迎转载,转载请注明出自CU ACCESSORY http://linux.chinaunix.net/bbs/thread-1153868-1-1 ...
 - Mysql加锁过程详解(7)-初步理解MySQL的gap锁
			
Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...