leetcode376-摆动序列
leetcode 376
思路
变量定义:
- prediff:记录上一次相邻元素的差值。用于判断当前差值与上一个差值的关系
- curdiff:记录当前相邻元素的差值
- result:记录当前的摆动序列的长度,初始化为 1,因为至少一个元素就是一个摆动序列
遍历数组:
- 对于数组中的每一对相邻元素(nums[i] 和 nums[i+1]),计算它们的差值 curdiff = nums[i + 1] - nums[i]
- 根据 curdiff 和 prediff 的值来判断是否是摆动序列的一个有效部分:
- 如果 curdiff > 0 且 prediff <= 0(即从下降或平稳到上升),或者 curdiff < 0 且 prediff >= 0(即从上升或平稳到下降),说明序列在交替变化,因此可以增加 result
- 如果上述条件成立,就更新 prediff 为 curdiff,表示继续保持这个方向
返回结果:
遍历完成后,返回 result,即最长摆动序列的长度
关键点:
- 通过使用 prediff 和 curdiff 来追踪当前和之前的差值,确保每次相邻的元素严格交替增长或减少。
- 通过贪心策略,每次遇到有效的摆动时就增加结果长度
实现
var wiggleMaxLength = function (nums) {
let prediff = 0, curdiff = 0;
let result = 1;
for (let i = 0; i < nums.length - 1; i++) {
curdiff = nums[i + 1] - nums[i]
if (curdiff > 0 && prediff <= 0 || curdiff < 0 && prediff >= 0){
result++;
prediff = curdiff
}
}
return result;
};