Leetcode 978 最長湍流子陣列

2021-09-11 06:55:23 字數 751 閱讀 2235

當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...