當 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:
輸入:[100]
輸出:1
class solution else
ret = math.max(ret,right - left + 1);
}return ret;
}}
/*
* 狀態定義:
* increased[i]:以 arr[i] 結尾,並且 arr[i - 1] < arr[i] 的湍流子陣列的長度;
* decreased[i]:以 arr[i] 結尾,並且 arr[i - 1] > arr[i] 的湍流子陣列的長度。
** 狀態轉移方程:
* increased[i] = decreased[i - 1] + 1 if arr[i - 1] < arr[i] for i > 0;
* decreased[i] = increased[i - 1] + 1 if arr[i - 1] > arr[i] for i > 0。
** 初始化:只有乙個元素的時候,湍流子陣列的長度是 11;
* 輸出:兩個狀態陣列所有元素的最大值是最長湍流子陣列的長度;
* */
class solution else if(arr[i - 1] > arr[i])else
res = math.max(res,math.max(increased[i],decreased[i]));
}return res;
}}
class solution else if(arr[i] > arr[i - 1])else
res = math.max(res,math.max(dp[i][0],dp[i][1]));
}return res;
}}
class solution else if(arr[i] < arr[i -1])else
res = math.max(res,math.max(increased,decreased));
}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 也就是說,如果比較符號在...