當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])
本題最容易想到的是兩層for迴圈,但是題目給定a的長度最大40000,le9一定會超時。考慮到兩層for迴圈是中的每一趟存在大量的重複計算,可以用動態規劃在o(n)時間複雜度內求解。定義狀態dp[i]是以a[i]結尾最長湍流子串。如果a[i]兩側比較符號不同,dp[i] = dp[i-1] + 1,否則dp[i] = 1
int maxturbulencesize(vector& a) ;
dp[0] = 1;
maxl = max(maxl,dp[0]);
char op = '=';
if(a[0] < a[1]) op = '<';
if(a[0] > a[1]) op = '>';
for(int i=1;ia[i+1]) opt = '>';
if(opt != '=')
else dp[i] = 1;
op = opt;}}
return (alle == 1)?1:(maxl+1);
}
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...
leetcode978 最長湍流子陣列
當 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 也就是說,如果比較符號在...
leetcode 978 最長湍流子陣列
關注相鄰兩個數字之間的符號就可以了。如果用 0,1,2代表比較符的話 分別對應 這些交替的比較符會形成若干個連續的塊 我們知道何時乙個塊會結束 當已經到符號串行末尾的時候或者當序列元素不再交替的時候。int maxturbulencesize int a,int asize int flag 0 0...