摆动序列的问题解法为贪心;可以理解为上下坡问题,上坡下坡必须交替进行,不能存在平坡
局部最优就是只有上下坡元素为一
所以在递归中,模拟他每一次遇到的元素,计算差值比较即可
在代码中,记录两个变量,一个记录上一个的差值,一个记录当前的差值,让两个变量在大于零和小于零摆动
记住,不需要在代码中删除元素,我们是模拟,符合条件长度++就可以
public int wiggleMaxLength(int[] nums) {
int preDiff = 0;
int curDiff = 0;
int result = 1;//最后那个有个峰值
for (int i = 0; i < nums.length-1; i++) {
curDiff = nums[i+1]-nums[i];
if ((preDiff>=0&&curDiff<0)||preDiff<=0&&curDiff>0){
result++;
}
if (curDiff==0){
// 注意这个地方,如果他是零,不能记录他的差值,防止下次计算无法比较大小,
// 直接跳过就好,等她有数的时候继续
}else {
preDiff =curDiff;
}
}
return result;
}