java编写
规律发现只需要扫过一遍数组,状态不同则加入一个点(也就是数量加1)
四个状态,state==3(这是用于起始刚进入循环,算是不确定状态,用来判断起始是上升还是下降)state==1之前是上升状态这时在下降就把点加进去,-1之前是下降状态这时再上升就把点加进去,0就不动
public class WiggleSubsequence {
public int wiggleMaxLength(int[] nums) {
if(nums.length==2&&nums[0]==nums[1]){
return 1;
}
if(nums.length==2&&(nums[0]!=nums[1])){
return 2;
}
int state=3;//不确定状态 1上升 -1 下降 0 平稳
int max=0;
for(int i=1;i<nums.length;i++){
if(state==2){
if(nums[i]-nums[i-1]>0){
state=1;
max=2;
continue;
}
if(nums[i]-nums[i-1]<0){
state = -1;
max=2;
continue;
}
else {
state=0;
max=1;
continue;
}
}
if(state==1){
if(nums[i]<nums[i-1]){
max++;
state=-1;
continue;
}
else{
continue;
}
}
if(state == 0){//遇到前后两个相同的数
continue;
}
if(state == -1){
if(nums[i]>nums[i-1]){
max++;
state = 1;
continue;
}
else continue;
}
}
return max;
}
}