考虑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]
为了解决这个问题,我们将遵循以下步骤-
n:=数组A的大小
prevBig:= 1,prevSmall:= 1,currBig:= 1,currSmall:= 1和ret:= 1
当我在1到n – 1的范围内时
如果A [i]> A [i – 1],则currBig:= 1 + prevSmall
如果A [i] <A [i – 1],则currSmall:= 1 + prevBig
ret:= ret,currBig和currSmall的最大值
prevSmall:= currSmall,prevBig:= currBig,currSmall:= 1,currBig:= 1
返回ret
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int maxTurbulenceSize(vector<int>& A) {
int n = A.size();
int prevBig = 1;
int prevSmall = 1;
int currBig = 1;
int currSmall = 1;
int ret = 1;
for(int i = 1; i < n; i++){
if(A[i] > A[i - 1]){
currBig = 1 + prevSmall;
}
if(A[i] < A[i - 1]){
currSmall = 1 + prevBig;
}
ret = max({ret, currBig, currSmall});
prevSmall = currSmall;
prevBig = currBig;
currSmall = 1;
currBig = 1;
}
return ret;
}
};
main(){
vector<int> v1 = {9,4,2,10,7,8,8,1,9};
Solution ob;
cout << (ob.maxTurbulenceSize(v1));
}[9,4,2,10,7,8,8,1,9]
输出结果
5