一、力扣 376. 摆动序列
1. 题目解析
这道题的核心在于寻找序列中的波峰和波谷。只要相邻元素的大小关系发生变化,就能构成一个摆动序列。
2. 算法原理
我们不需要记录具体的子序列,只需要统计趋势变化的次数。如果当前差值与前一个差值符号相反(或其中一个为 0),说明趋势发生了反转,计数加一。
注意:由于最后一个元素不会被计算在内,初始返回值设为 1。

3. 代码实现
class Solution {
public int wiggleMaxLength(int[] nums) {
if (nums.length < 2) {
return nums.length;
}
int left = 0;
int ret = 1;
for (int i = 0; i < nums.length - 1; i++) {
int right = nums[i + 1] - nums[i];
if (right == 0) {
continue;
}
// 符号改变表示趋势反转
if (left * right <= 0) {
ret++;
left = right;
}
}
ret;
}
}


