题目
https://leetcode-cn.com/problems/longest-turbulent-subarray/
动态规划
思路
代码
class Solution {
public int maxTurbulenceSize(int[] arr) {
int ret = 1;
int n = arr.length;
int dp0 = 1, dp1 = 1;//dp0:< , dp1:>
for (int i = 1; i < n; i++) {
if (arr[i - 1] > arr[i]) {
dp0 = dp1 + 1;
dp1 = 1;
} else if (arr[i - 1] < arr[i]) {
dp1 = dp0 + 1;
dp0 = 1;
} else {
dp0 = 1;
dp1 = 1;
}
ret = Math.max(ret, dp0);
ret = Math.max(ret, dp1);
}
return ret;
}
}
我的代码
class Solution {
public int maxTurbulenceSize(int[] arr) {
int len=arr.length;
if(len==0) return 0;
if(len==1) return 1;
int count=0;
int max=Integer.MIN_VALUE;
int be_flag=0;
int flag=0;
for(int i=0;i<len-1;i++){
if(arr[i]>arr[i+1]){
flag=1;
}
else if(arr[i]<arr[i+1]){
flag=-1;
}
//arr[i]=arr[i+1] 这个等号不能用
else{
max=Math.max(max,count);
count=0;
be_flag=0;
continue;
}
//与前一个符号相同
if(be_flag!=0&&flag==be_flag){
max=Math.max(max,count);
count=1;
}
//可以与前面的形成子数组
else{
count++;
}
be_flag=flag;
}
return Math.max(max+1,count+1);
}
}