思路:摆动序列即两个相邻数字的差值为正负数交替的整数序列,看完题目需要注意几个点,一个是求的是子序列,也就是可以是不连续的,第二个是一个整数序列可能有多个一样长的摆动子序列,我们只需要求出最长的长度即可,即我们在判断摆动序列的时候用一个计数器进行记录长度。
那么如何判断是否是摆动序列?根据相邻数字的差即可
用两个变量分别代表当前一对数字的差值和前一对的差值,当这两个变量正负相反的时候 就判断为是摆动序列的一部分 增加计数器值 并且更新变量值.
在遍历的时候 因为我们prediff初始为0 判断的时候需要用<=和>= 不然没法正常迭代
if(nums.length <= 1) return nums.length;
int curDiff = 0;
int preDiff = 0;
// 默认最右边的一个是摆动序列
int res = 1;
for (int i = 0; i < nums.length-1; i++) {
curDiff = nums[i+1] - nums[i];
// 判断是否有两对差值互为正负的
// 一开始prediff初始为0 所以这里是<=0
if ((curDiff > 0 && preDiff <= 0)||(curDiff<0 && preDiff >= 0)){
res++;
preDiff = curDiff;
}
}
return res;