摆动序列

摆动序列中相邻数字之差在正负数之间交替。 难点在于:满足边界条件。 似乎直接遍历数组,并且记录差值满足条件的数字即可,但是对于数组中连续相等的元素以及数组的首尾元素。应当考虑preDiff为零的情况,这也是满足条件的。

var wiggleMaxLength = function(nums) {
    if(nums.length <= 1) return nums.length
    let result = 1
    //preDiff表示当前数和前一个数的差,curDiff表示后一个数和当前数的差值
    let preDiff = 0, curDiff = 0
    for(let i = 0; i < nums.length - 1; i++){
        curDiff = nums[i + 1] - nums[i]
        //满足条件的情况,preDiff为0可以保留数组首尾以及中间有平坡的情况的数字
        if((preDiff >= 0 && curDiff < 0) || (preDiff <= 0 && curDiff > 0)) {
            result++
            preDiff = curDiff
        }
    }
    return result
};

因此,本题的思路和常规想法的不同点在于。

  • 需要考虑preDiff等于0的情况。
  • 注意preDiff = curDiff这个赋值语句应该在满足条件的时候才能进行,因为不满足条件的数字没有必要记录他们的差值
上次更新:: 2023/5/2 20:39:46