376. Wiggle Subsequence

Leetcode link

解题思路

本题要求我们找出一个数组中最长的摆动序列,且允许对数组中的元素进行删除操作


这一题我们可以用贪心的思路来求解

已知一个给定的数组有多个 “峰”(比两边都大的数) 跟多个 “谷”(比两边都小的数),峰跟谷中间也可能会有一些过渡元素

我们的目标就是,把过渡元素全部剔除掉,计算剩余的峰与谷的个数

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;
};

results matching ""

    No results matching ""