考虑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