ลองพิจารณาอาร์เรย์ย่อย A[i], A[i+1], ..., A[j] ของ A ว่าปั่นป่วนเมื่อเป็นไปตามเงื่อนไขเหล่านี้ -
ดังนั้นอาร์เรย์ย่อยจะมีความปั่นป่วนหากเครื่องหมายเปรียบเทียบพลิกไปมาระหว่างคู่ขององค์ประกอบที่อยู่ติดกันในอาร์เรย์ย่อย ตอนนี้หาความยาวของขนาดสูงสุดของ subarray ที่ปั่นป่วนขนาดสูงสุดของ A ดังนั้นหากอินพุตเป็นเหมือน [9,4,2,10,7,8,8,1,9] เอาต์พุตคือ 5 นี่เป็นเพราะ A[1]> เอ[2] <เอ[3]> เอ[4] <เอ[5]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
n :=ขนาดของอาร์เรย์ A
-
prevBig :=1, prevSmall :=1, currBig :=1, currSmall :=1 และ ret :=1
-
สำหรับฉันอยู่ในช่วง 1 ถึง n – 1
-
รีเทิร์น
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
#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