Loading

【力扣】摆动序列(贪心)

题目描述

image
按理说思路是很简单的,用两个指针向前遍历,符合摆动序列的话就记录长度,不符合的话就让快指针向前移动一格跳过。
image
但是在写的时候会出很多奇奇怪怪的错,总会卡在某些特殊的样例上,细节控制不好。
image
比如出现这种情况。

感觉贪心只是很模糊的一种思路,很难用一个统一的模版处理,不同问题之间的细节差别太大了。

代码如下:

class Solution {
public:
    int wiggleMaxLength(vector<int>& nums) {
        if (nums.size() <= 1) return nums.size();
        int curDiff = 0; // 当前一对差值
        int preDiff = 0; // 前一对差值
        int result = 1;  // 记录峰值个数,序列默认序列最右边有一个峰值
        for (int i = 0; i < nums.size() - 1; i++) {
            curDiff = nums[i + 1] - nums[i];
            // 出现峰值
            if ((preDiff <= 0 && curDiff > 0) || (preDiff >= 0 && curDiff < 0)) {
                result++;
                preDiff = curDiff; // 注意这里,只在摆动变化的时候更新prediff
            }
        }
        return result;
    }
};

好像我一开始时把它想的太复杂了。
感觉最好从一开始就想好整体思路突然再写代码,只在局部小修小补的话反而最容易越搞越复杂,最后除了多出一堆if语句之外什么问题也没解决。。

posted @ 2024-03-10 14:19  SaTsuki26681534  阅读(13)  评论(0)    收藏  举报