Skip to content

摆动序列

js
// 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。
// 第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。
// 输入: [1,7,4,9,2,5]
// 输出: 6
// 解释: 整个序列均为摆动序列。

function fn(nums) {
    // 少于一个元素直接返回数组长度
    if(nums.length <= 1) return nums.length
    let res = 1, pre = 0, cur = 0
    for(let i = 0; i < nums.length - 1; i ++){
        // 后一个减去当前元素
        cur = nums[i + 1] - nums[i]
        // 上一个坡度为递增,且当前坡度为递减
        // 上一个坡度为递减,且当前坡度为递增
        if((pre >= 0 && cur < 0) || (pre <= 0 && cur > 0)){
            res ++
            pre = cur
        }
    }
    return res
}

console.log(fn([1,7,4,9,2,5]))
console.log(fn([1,2,2,2,3,4]))
// 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。
// 第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。
// 输入: [1,7,4,9,2,5]
// 输出: 6
// 解释: 整个序列均为摆动序列。

function fn(nums) {
    // 少于一个元素直接返回数组长度
    if(nums.length <= 1) return nums.length
    let res = 1, pre = 0, cur = 0
    for(let i = 0; i < nums.length - 1; i ++){
        // 后一个减去当前元素
        cur = nums[i + 1] - nums[i]
        // 上一个坡度为递增,且当前坡度为递减
        // 上一个坡度为递减,且当前坡度为递增
        if((pre >= 0 && cur < 0) || (pre <= 0 && cur > 0)){
            res ++
            pre = cur
        }
    }
    return res
}

console.log(fn([1,7,4,9,2,5]))
console.log(fn([1,2,2,2,3,4]))