LeetCode:978. Longest Turbulent Subarray - Python
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)可以设置三个变量maxAB
,currA
,currB
分别表示,最优值,以当前位置升序时的子串长度,以当前位置降序时的子串长度。
(2)如当前值A[i] > A[i - 1]
,以第i
个元素结尾,呈现升序的情况,此时,currB = currA + 1
且把currB
初始化为1
。A[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相关推荐
- 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 ...
- 978 Longest turbulent subarray
文章目录 题目 滑动窗口思路 dp思路 滑动窗口高效 标签:sliding window, 滑动窗口 题目 A subarray A[i], A[i+1], ..., A[j] of A is sai ...
- leetcode 978. Longest Turbulent Subarray | 978. 最长湍流子数组(Java)
题目 https://leetcode.com/problems/longest-turbulent-subarray/ 题解 虽然 similar questions 没列出来,但能想到之前做过的( ...
- leetCode 978. Longest Turbulent Subarray
求一个数组中连续混乱子数组的最大长度,连续混乱子数组满足条件定义为:A[i-1]<A[i]>A[i+1]或A[i-1]>A[i]<A[i+1],最后得出长度 class Sol ...
- 978. Longest Turbulent Subarray——array
题目分析:不是用动态规划,python3没有了cmp函数 class Solution(object):def cmp(self, a, b):if a > b:return 1if a < ...
- 978. Longest Turbulent Subarray [Medium]
/*** 自己的做法,用downFlg标志当前的判断是否需要是下降or上升来保持和前面的连续* Runtime: 5 ms, faster than 49.88%* Memory Usage: 42. ...
- LeetCode——978. 最长湍流子数组(Longest Turbulent Subarray)——分析及代码(Java)
LeetCode--978. 最长湍流子数组[Longest Turbulent Subarray]--分析及代码[Java] 一.题目 二.分析及代码 1. 动态规划(一维数组) (1)思路 (2) ...
- LeetCode:322. 零钱兑换(python)
LeetCode:322. 零钱兑换(python) 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总 ...
- [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 ...
最新文章
- service能去调另外一个service吗_kubernetes的service和pod是如何关联的?
- 还在“葛优躺”?伤腰还容易脊椎变形!
- Bailian4034 选择客栈【序列处理】
- atitit.atiHtmlUi web组件化方案与规范v1
- 遗传算法的C语言设计
- 深度好文:这才是实际工作中的竞品分析
- python调用扫描仪设备_python 端口扫描仪
- xp无法访问win7计算机,xp连接win7共享打印机无法连接
- CCD和CMOS大小(尺寸)对比图
- 计算机执行优盘上程序的过程,U盘打开后,文件变成exe执行文件怎么办-电脑自学网...
- 2017年愚人节思考
- 从最简单的ROE和PB的角度去选股
- android cs,《CS反恐精英》Android版 经典游戏再现
- 哔哩哔哩(B站)的前端之路
- 百度飞桨PP-YOLOE ONNX 在LabVIEW中的部署推理(含源码)
- html励志素材,名人励志故事素材
- “动感”新春:香港高铁首次加入春运 车票抢手
- SAP:云时代,打造智慧费用管理的四大关键词
- 易语言 大数计算 大数支持库的使用实例
- [面试题]为什么要用vue?