当 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 的最大湍流子数组的长度。
输入:[9,4,2,10,7,8,8,1,9] 输出:5 解释:(A[1] > A[2] < A[3] > A[4] < A[5])
解题思路:因为题目比较傻逼,所以建立2个dp输出最大的。只要反转了就dp++
class Solution {
public:
int maxTurbulenceSize(vector<int>& arr) {
int n = arr.size();
if(n <= 0) return 0;
vector<int> dp1(n,1);
vector<int> dp2(n,1);
for(int i = 1 ; i < n ; i ++)
{
if(i % 2 ==0)
{
if(arr[i-1] > arr[i])
{
dp1[i] = max(dp1[i-1] + 1, dp1[i]);
}
if(arr[i-1] < arr[i])
{
dp2[i] = max(dp2[i-1] + 1, dp2[i]);
}
}
else
{
if(arr[i-1] < arr[i])
{
dp1[i] = max(dp1[i-1] + 1, dp1[i]);
}
if(arr[i-1] > arr[i])
{
dp2[i] = max(dp2[i-1] + 1, dp2[i]);
}
}
}
int dp11 = *max_element(dp1.begin(), dp1.end());
int dp22 = *max_element(dp2.begin(), dp2.end());
return max(dp11,dp22);
}
};