978.最长湍流子数组

tech2022-07-31  136

最长湍流子数组 当 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 { public: int maxTurbulenceSize(vector<int>& A) { int size = A.size(); if (size == 1) { return 1; } if (size == 2) { if (A[0] != A[1]) { return 2; } else { return 1; } } bool flag = true; for(int i = 0; i < size - 1; i++) { if(A[i] != A[i + 1]) { flag = false; break; } } if(flag) return 1; int dp[size]; dp[0] = 1; if (A[0] == A[1]) { dp[1] == 1; } else { dp[1] = 2; } for (int i = 2; i < size; i++) { if (A[i] > A[i - 1]) { if (A[i - 1] < A[i - 2]) { dp[i] = dp[i - 1] + 1; } else { dp[i] = 2; } } if (A[i] < A[i - 1]) { if (A[i - 1] > A[i - 2]) { dp[i] = dp[i - 1] + 1; } else { dp[i] = 2; } } if (A[i] == A[i - 1]) { dp[i] = 1; } } int maxValue = 1; for (int i = 0; i < size; i++) { maxValue = max(maxValue, dp[i]); } return maxValue; } };
最新回复(0)