376. Wiggle Subsequence
解题思路
本题要求我们找出一个数组中最长的摆动序列,且允许对数组中的元素进行删除操作
这一题我们可以用贪心的思路来求解
已知一个给定的数组有多个 “峰”(比两边都大的数) 跟多个 “谷”(比两边都小的数),峰跟谷中间也可能会有一些过渡元素
我们的目标就是,把过渡元素全部剔除掉,计算剩余的峰与谷的个数
Javascript
/**
* @param {number[]} nums
* @return {number}
*/
var wiggleMaxLength = function(nums) {
let len = nums.length;
if(len < 2) {
return len;
}
let prevDiff = nums[1] - nums[0];
// 要注意数组的开始与结尾也是峰或谷
let res = prevDiff === 0 ? 1 : 2;
for(let i = 2;i < len;i++) {
let diff = nums[i] - nums[i - 1];
// 当我们发现出现了新的峰或谷,就可以把结果加一
if((diff > 0 && prevDiff <= 0) || (diff < 0 && prevDiff >=0)) {
res++;
prevDiff = diff;
}
}
return res;
};