206.贪心算法:摆动序列(力扣)

代码展示

cpp 复制代码
class Solution {
public:
    int wiggleMaxLength(vector<int>& nums) 
    {
        if (nums.size() <= 1) return nums.size();  // 如果数组长度小于等于1,返回数组长度

        int curdiff = 0;  // 当前元素和前一个元素的差值
        int prediff = 0;  // 前一个差值
        int result = 1;   // 最长摇摆子序列的长度,初始化为1,因为至少有一个元素

        for (int i = 0; i < nums.size() - 1; i++) 
        {
            curdiff = nums[i + 1] - nums[i];  // 计算当前元素和下一个元素的差值

            // 如果当前差值和前一个差值符号不同(包括第一次比较的情况),并且当前差值不为0
            if ((prediff <= 0 && curdiff > 0) || (prediff >= 0 && curdiff < 0)) 
            {
                result++;       // 摇摆子序列长度加1
                prediff = curdiff; // 更新前一个差值为当前差值
            }
        }

        return result;  // 返回最长摇摆子序列的长度
    }
};

代码核心思想

  1. 处理特殊情况

    • 如果数组长度小于等于1,直接返回数组长度,因为这种情况下,摇摆子序列的长度就是数组本身的长度。
  2. 初始化变量

    • curdiff:当前元素和前一个元素的差值。
    • prediff:前一个差值,用于记录上一次的差值。
    • result:结果,表示最长摇摆子序列的长度,初始值为1,因为至少有一个元素可以作为摇摆子序列的一部分。
  3. 遍历数组

    • 从数组的第一个元素开始,逐个计算当前元素和下一个元素的差值 (curdiff)。
    • 如果当前差值和前一个差值的符号不同(即一个正一个负),或者当前差值是第一个差值:
      • 增加结果 result 的值。
      • 更新前一个差值 prediff 为当前差值 curdiff
  4. 返回结果

    • 返回计算得到的最长摇摆子序列的长度。
相关推荐
地平线开发者23 分钟前
征程 6 | QAT 新版 qconfig 量化模板使用教程
算法·自动驾驶
多恩Stone34 分钟前
【ModelScope-1】数据集稀疏检出(Sparse Checkout)来下载指定目录
人工智能·python·算法·aigc
山峰哥1 小时前
沉浸式翻译插件深度评测:打破语言壁垒的黑科技利器
数据结构·科技·算法·编辑器·办公
AI脚下的巨人1 小时前
机器人逆运动学:从SVD到IK算法
算法·机器人
ゞ 正在缓冲99%…2 小时前
2025.9.28华为软开
算法·华为
9ilk2 小时前
【C++】 --- 哈希
c++·后端·算法·哈希算法
再卷也是菜3 小时前
C++篇(21)图
数据结构·c++·算法
星轨初途4 小时前
C++入门(算法竞赛类)
c++·经验分享·笔记·算法
灰灰勇闯IT5 小时前
KMP算法在鸿蒙系统中的应用:从字符串匹配到高效系统级开发(附实战代码)
算法·华为·harmonyos
小龙报5 小时前
【算法通关指南:数据结构和算法篇 】队列相关算法题:3.海港
数据结构·c++·算法·贪心算法·创业创新·学习方法·visual studio