小编给大家分享一下leetcode如何求最长湍流子数组,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
当 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,题目意思翻译:连续呈波浪线增减的数组长度最大值
2,取A[i-1],A[i],A[i+1]三个值
A,如果满足条件,则右指针递增
B,不满足条件左指针移动到当前位置
3,注意边界条件
A,一个数
B,两个数
(1)两个数不等
(2)两个数相等
C,A[i-1],A[i],A[i+1]三个值中
(1)3个数相等
(2)两个数相等
func maxTurbulenceSize(A []int) int { if len(A) <2{ return len(A) } if len(A)==2{ if A[0]==A[1]{ return 1 } return 2 } start:=0 max:=0 for i:=1;i<len(A)-1;i++{ if sign(A[i-1],A[i])*sign(A[i],A[i+1])!=-1{ start=i if sign(A[i-1],A[i])==0 && sign(A[i],A[i+1])==0{ if max<1{ max=1 } }else{ if max <2{ max=2 } } }else if max< i-start+2{ max=i-start+2 } } return max}func sign(a,b int) int{ if a>b{ return 1 } if a==b{ return 0 } return -1}
以上是“leetcode如何求最长湍流子数组”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/4586289/blog/4634824