当前位置: 首页 > article >正文

【贪心算法第四弹——376.摆动序列】

目录

1.题目解析

题目来源

测试用例

2.算法原理

3.实战代码

代码解析


本题还可以使用动态规划的解法来解决,不过动态规划的时间复杂度为O(N^2),而贪心解法的时间复杂度为O(N),动态规划方法的博客链接: 动态规划-子序列问题——376.摆动序列

1.题目解析

题目来源

376.摆动序列——力扣

测试用例

2.算法原理

贪心策略:找极值,定首尾 

具体实现思路以及特殊情况处理  

这里求极值需要使用两个变量来确定每个节点的左右状态,当左右相乘为负数说明此点为极值点,那么左右状态分别是什么呢,这里我们只解释右状态的含义(左状态同理),右状态就是当前节点右边与相邻节点之差(后减去前),此时差值大于0说明右边是上升,小于0则是下降,左状态同理,因此当两边状态不同也就是相乘为负数则代表该点为极值点 

特殊情况判断:

3.实战代码

class Solution {
public:
    int wiggleMaxLength(vector<int>& nums) 
    {
        int left = 0;
        int ret = 0;
        int n = nums.size();
        if(n < 2)
        {
            return n;
        }
        for(int i = 0;i < n - 1;i++)
        {
            int right = nums[i+1] - nums[i];
            if(right == 0)
            {
                continue;
            }
            if(left * right <= 0)
            {
                ret++;
            }
            left = right;
        }
        return ret + 1;
    }
};

代码解析


http://www.kler.cn/a/411203.html

相关文章:

  • 网络--传输层协议--UDP
  • Java ArrayList 与顺序表:在编程海洋中把握数据结构的关键之锚
  • Day 26
  • Python 爬虫从入门到(不)入狱学习笔记
  • 数学建模_基于对数和傅里叶变换的多通道图像增强模型(处理模糊)Matlab代码包教会使用,直接替换数据即可
  • 【Linux学习】【Ubuntu入门】2-3 make工具和makefile引入
  • VisionPro 机器视觉案例 之 凹点检测
  • JAVA面向对象核心部分
  • C++设计模式之组合模式实践原则
  • 在 Mac(ARM 架构)上安装 JDK 8 环境
  • React 第八节组件生命周期钩子-类式组件,函数式组件模拟生命周期用法
  • 2024小迪安全基础入门第七课
  • 【实用技能】使用 DHTMLX Diagram让复杂流程可视化
  • C++11特性(详解)
  • SQL on Hadoop
  • 文心一言与千帆大模型平台的区别:探索百度AI生态的双子星
  • 网络安全:关于SecOC及测试开发实践简介
  • 华硕笔记本电脑用U盘重装windows系统
  • 自动化立体仓库堆垛机货叉故障处理
  • Faster R-CNN (目标检测)
  • Perforce SAST专家详解:自动驾驶汽车的安全与技术挑战,Klocwork、Helix QAC等静态代码分析成必备合规性工具
  • [自动化测试:实践01]:2:(4-1 )元素定位(selenium)在实际场景中的应用2
  • 【C#小知识】abstract、virtual、override、sealed关键字
  • Webpack前端工程化进阶系列(二) —— HMR热模块更新(图文+代码)
  • SpringBoot整合RabbitMQ应用
  • 避坑ffmpeg直接获取视频fps不准确