哎。。。滑動視窗的題目,自己猜到了要用滑動視窗,但是沒做出來;
這道題目用滑動視窗和dp都可以;
如果採用滑動視窗的記錄前一位標誌位,right和right-1比較,會丟失一部分序列;
例如:9,4,2,10,7,8;
湍流數列應該為:4,2,10,7,8;
但是如果採用我的滑動視窗比較會變為:2,10,7,8;
原因是當記錄了9,4,2之後,會從2重新開始計算湍流,而不是從4開始;
附錯誤**:
int maxturbulencesize(vector&arr)如果採用三位比較,這樣對於9,4,2,10,7,8;if (right == 1
) else
if ((!flag & arr[right] > arr[right - 1])||(flag & arr[right] < arr[right - 1
]))
else}}
return
cnt;
}
對於判斷4的時候,如果判斷
當4不滿足的時候,判斷可以從4重新判斷,而不會從2開始判斷,更簡單一點;
使用dp,維護兩個陣列來進行遍歷;
所以,狀態轉移方程為:
int maxturbulencesize(vector& arr)else if (arr[i - 1] > arr[i])
else
res = max(res, max(up[i], down[i]));
} return res;
}
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...
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 也就是說,如果比較符號在...