小编给大家分享一下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如何求最长湍流子数组”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
原创文章,作者:506227337,如若转载,请注明出处:https://blog.ytso.com/tech/opensource/224041.html