求一个数组中连续混乱子数组的最大长度,连续混乱子数组满足条件定义为:A[i-1]<A[i]>A[i+1]或A[i-1]>A[i]<A[i+1],最后得出长度
class Solution {
public:
int maxTurbulenceSize(vector<int>& A) {
int n = A.size();
if (n == 1)
return 1;
vector<int>dp(n, 0);
dp[0] = 1;//dp[i]代表以第i个数字结尾时最长混乱字串的长度
if (A[0] == A[1])
dp[1] = 1;
else
dp[1] = 2;
int MaxLen = dp[1];
for (int i = 2; i < n; i++) {
if (A[i - 1] == A[i])//当前数字和前一个数字相等,则dp[i]=1;
dp[i] = 1;
else if (!((A[i - 2] > A[i - 1]) ^ (A[i - 1] < A[i])))//若当前数字与前面两个数字仍然满足混乱子数组,则dp[i] = dp[i-1]+1;
dp[i] = dp[i - 1] + 1;
else //此时不满足混乱子数组,dp[i]重设为2;
dp[i] = 2;
MaxLen = max(MaxLen, dp[i]);//记录当前最大结果;
}
return MaxLen;
}
};