您好,登錄后才能下訂單哦!
小編給大家分享一下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如何求最長湍流子數組”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。