當 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:我是用滑動視窗解的,因為最近在練這個。右邊視窗移動的條件:前乙個是小於,這次比較是大於或者前乙個是大於,這次比較是小於,用flag記錄前一次比較是什麼情況;還有一種情況是前一次不滿足湍流陣列,使flag等於0.經過上述判斷後還不滿足的,就表示當前視窗內部不是乙個湍流陣列,需要移動i,把i移動到j的前乙個,對於[9,4,2,10,7,8,8,1,9],第一次修改i,i會到4的位置,並且下一次的j需要從2開始。但是這麼寫會在之後的8,8往復迴圈,所以在還要判斷乙個是否相等的情況。沒有任何優化,看著也很醜,不過思路還算比較清晰的。10ms.輸入:[100]
輸出:1
public
intmaxturbulencesize
(int
a)i=j-1;
j--; flag=0;
} result=math.
max(j-i+
1, result);}
return result;
}
leetcode 7/100 Leetcode 978 最長湍流子陣列
當a的子陣列a i a i 1 a j 滿足下列條件時,我們稱其為湍流子陣列 也就是說,如果比較符號在子陣列的相鄰元素對之間反轉,則子陣列是湍流子陣列。返回a的最大湍流子陣列的長度。示例1 輸入 9,4,2,10,7,8,8,1,9 輸出 5 解釋 a 1 a 2 a 3 a 4 a 5 本題最容易...
leetcode 978 最長湍流子陣列
陣列 dp 當a的子陣列a i a i 1 a j 滿足下列條件時,我們稱其為湍流子陣列 也就是說,如果比較符號在子陣列中的每個相鄰元素對之間翻轉,則該子陣列是湍流子陣列。返回a的最大湍流子陣列的長度。示例 1 輸入 9,4,2,10,7,8,8,1,9 輸出 5解釋 a 1 a 2 a 3 a 4...
leetcode 978 最長湍流子陣列
關注相鄰兩個數字之間的符號就可以了。如果用 0,1,2代表比較符的話 分別對應 這些交替的比較符會形成若干個連續的塊 我們知道何時乙個塊會結束 當已經到符號串行末尾的時候或者當序列元素不再交替的時候。int maxturbulencesize int a,int asize int flag 0 0...