MS 978. Longest Turbulent Subarray
DP version:
class Solution {
public:
int maxTurbulenceSize(vector<int>& A) {
const int size = A.size();
if(size < 2){
return size;
}
vector<int> dp(size, 1);
dp[0] = 1;
int res = 1;
for(int i = 0; i < size - 1; i++){
if(i % 2 == 0){
if(A[i] > A[i + 1]){
dp[i + 1] = dp[i] + 1;
}
}
else{
if(A[i] < A[i + 1]){
dp[i + 1] = dp[i] + 1;
}
}
res = max(res, dp[i + 1]);
}
dp = vector<int>(size, 1);
for(int i = 0; i < size - 1; i++){
if(i % 2 == 0){
if(A[i] < A[i + 1]){
dp[i + 1] = dp[i] + 1;
}
}
else{
if(A[i] > A[i + 1]){
dp[i + 1] = dp[i] + 1;
}
}
res = max(res, dp[i + 1]);
}
return res;
}
};
贪心法
class Solution {
public:
int maxTurbulenceSize(vector<int>& A) {
const int size = A.size();
if(size < 2){
return size;
}
//vector<int> dp(size, 1);
//dp[0] = 1;
int dec = 1, inc = 1;
int res = 1;
for(int i = 0; i < size - 1; i++){
if(A[i] > A[i + 1]){
dec = inc + 1;
inc = 1;
}
else if(A[i] < A[i + 1]){
inc = dec + 1;
dec = 1;
}
else{
inc = 1;
dec = 1;
}
res = max(res, max(inc, dec))
}
return res;
}
};
Comments
Post a Comment