求最值問題,不用輸出具體的結果,只需要輸出長度,那麼就可以使用動態規劃,確定了方法,就可以根據方法的模板來寫。
首先確定狀態,這裡的dp陣列為2行n列
dp[0][j]表示以第j個數字為結尾的,且當前為公升序列,也就是第j個數大於第j-1個數。
dp[1][j]表示以第j個數字為結尾的,且當前為降序列,也就是第j個數小於第j-1個數。
第一行代表狀態為公升,第二行代表狀態為減
那麼就有了狀態轉移方程:
如果當前狀態為公升,那麼dp[0][j]=dp[1][j-1]+1;
如果當前狀態為降,那麼dp[1][j]=dp[0][j-1]+1;
最終結果就是求dp中的最大值,這就遍歷了所有的情況
class
solution
else
if(arr[j]
>arr[j-1]
) res=
max(res,
max(dp[0]
[j],dp[1]
[j]));
}return res;}}
;
978 最長湍流子陣列
當 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 也就是說,如果比較符號在...
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 最長湍流子陣列
當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 本題最容易...