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的最大湍流子数组的长度

示例 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 <= A.length <= 40000
  • 0 <= A[i] <= 10^9

问题分析:

这个题目和我记忆中的拼多多的一个校招题目类似,他们那个是求最长长谷的,一般是一个遍历就可以得到结果。现在介绍一个类似于动态规划的方法。

(1)可以设置三个变量maxABcurrAcurrB分别表示,最优值,以当前位置升序时的子串长度,以当前位置降序时的子串长度。

(2)如当前值A[i] > A[i - 1],以第i个元素结尾,呈现升序的情况,此时,currB = currA + 1且把currB 初始化为1A[i] < A[i - 1] 同理即可,如果相等,则currA, currB = 1, 1

(3)每遍历一个元素,就判断更新一次最优解maxAB = max(maxAB, currA, currB) ,最后返回结果即可。

Python3实现:

# @Time   :2019/01/22
# @Author :LiuYinxing
# 动态规划class Solution:def maxTurbulenceSize(self, A):""":type A: List[int]:rtype: int"""maxAB, currA, currB = 1, 1, 1  # 初始化for i in range(1, len(A)):if A[i] > A[i - 1]:  # 以第 i 个元素结尾,呈现升序的情况currA = currB + 1currB = 1elif A[i] < A[i - 1]:  # 以第 i 个元素结尾,呈现降序的情况currB = currA + 1currA = 1else:currA, currB = 1, 1  # 出现相等的情况,重新计数maxAB = max(maxAB, currA, currB)  # 更新最优值return maxABif __name__ == '__main__':solu = Solution()A = [9, 4, 2, 10, 7, 8, 8, 1, 9]print(solu.maxTurbulenceSize(A))

声明: 总结学习,有问题或不当之处,可以批评指正哦,谢谢。

题目链接、参考链接

LeetCode:978. Longest Turbulent Subarray - Python相关推荐

  1. LeetCode #978. Longest Turbulent Subarray

    题目描述: A subarray A[i], A[i+1], ..., A[j] of A is said to be turbulent if and only if: For i <= k ...

  2. 978 Longest turbulent subarray

    文章目录 题目 滑动窗口思路 dp思路 滑动窗口高效 标签:sliding window, 滑动窗口 题目 A subarray A[i], A[i+1], ..., A[j] of A is sai ...

  3. leetcode 978. Longest Turbulent Subarray | 978. 最长湍流子数组(Java)

    题目 https://leetcode.com/problems/longest-turbulent-subarray/ 题解 虽然 similar questions 没列出来,但能想到之前做过的( ...

  4. leetCode 978. Longest Turbulent Subarray

    求一个数组中连续混乱子数组的最大长度,连续混乱子数组满足条件定义为:A[i-1]<A[i]>A[i+1]或A[i-1]>A[i]<A[i+1],最后得出长度 class Sol ...

  5. 978. Longest Turbulent Subarray——array

    题目分析:不是用动态规划,python3没有了cmp函数 class Solution(object):def cmp(self, a, b):if a > b:return 1if a < ...

  6. 978. Longest Turbulent Subarray [Medium]

    /*** 自己的做法,用downFlg标志当前的判断是否需要是下降or上升来保持和前面的连续* Runtime: 5 ms, faster than 49.88%* Memory Usage: 42. ...

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

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

  8. LeetCode:322. 零钱兑换(python)

    LeetCode:322. 零钱兑换(python) 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总 ...

  9. [Swift]LeetCode978. 最长湍流子数组 | Longest Turbulent Subarray

    原文地址:https://www.cnblogs.com/strengthen/p/10294636.html A subarray A[i], A[i+1], ..., A[j] of A is s ...

最新文章

  1. 互动网计算机频道图书7日销售排行(05.20-05.26)
  2. java TreeMap 源代码分析 平衡二叉树
  3. 左神算法基础班3_13深度拷贝含有随机指针的链表
  4. 请查收你的GitHub 2020 年度报告!
  5. 【Java】常见的Eclipse快捷键
  6. 使用ffmpeg进行图像格式转换以及图像缩放/sws_scale/linux/c++/c/rgb-yuv420
  7. Python在线考试系统防作弊功能的思路和实现
  8. 让敏捷交付优秀的软件
  9. java 清屏_【图片】请问java编写中如何做到清屏啊。。。_java吧_百度贴吧
  10. Attempt to invoke virtual method 'void android.support.v4.app.Fragment.setNextAnim(int)'
  11. spring aop 和Transaction一起使用执行顺序问题
  12. 静态淘宝热卖界面(纯CSS)
  13. 黑苹果登录apple id_充分利用Apple登录功能
  14. 服务器c盘里会有大量.log文件,电脑C盘爆满怎么办?这3个文件夹放心删,瞬间多出10个G...
  15. Windows环境下32位汇编语言程序设计(典藏版)(含CD光盘1张)
  16. 远程计算机网络会议有哪些优缺点,远程会议
  17. 关于mac苹果电脑装win10系统发热严重的解决方法
  18. GraphQL简介及入门
  19. C#中抽象类和接口的区别与应用场景
  20. gitlab议题模板上传创建

热门文章

  1. 快捷键使用教程-Mindjet MindManager
  2. 联想拯救者R270笔记本安装双系统Win10+Ubuntu16.04
  3. QT摄像头抓图浏览demo
  4. 树莓派4B原生系统Raspbian(Buster)安装ROS(Melodic)
  5. 你所未曾了解的大数据:人为力量
  6. 2023认证杯C题免费思路(进阶版)
  7. FaceNet--Google的人脸识别(转)
  8. android设置透明状态栏
  9. 为什么都在选择IAST作为安全漏洞检测工具
  10. 如何判断素数(C++版)