2021-02-08力扣每日一题
分析题目,简单理解即是找出"<"、">“交替出现的最大次数
动态规划,例如,对于数组[9,4,2,10,7,8,8,1,9],定义变量count = 1 ,max= 1,对于首个”>“或”<",count++;max++,之后,碰到一个大于一个小于或一个小于一个大于时count++,如果加了之后的count>max,则更新max的值。
对于数组:|9 |4 |2 |10 |7 |8 |8 |1 |9 |
大小比较:> > < > < = > <
count:2 3 4 5 2 2 3
max:2 3 4 5 5 5 5
代码:执行用时:击败了87.95%的用户
class Solution {
public int maxTurbulenceSize(int[] arr) {
if(arr.length==2 && arr[0]!=arr[1])
return 2;
int max=1,count=1,flag=1;;
for(int i=0;i<arr.length-2;i++){
if((arr[i]>arr[i+1]||arr[i+1]>arr[i])&&flag==1){//排除所有数都相等的情况
count++;
max++;
flag=0;
}
if(flag==0){
if((arr[i]>arr[i+1]&&arr[i+1]<arr[i+2])
|| (arr[i]<arr[i+1]&&arr[i+1]>arr[i+2])){//如果异号
count++;
if(max<count)
max = count;
}
else
count = 2;
}
}
return max;
}
}