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

[贪心算法] 摆动序列

1.解析

在这里插入图片描述
这里我们的贪心体现在,这里我们只需要找到每一个拐点位置的数字即可,
证明:在这里插入图片描述
当我们在A点时,我们下一步的选择有四种

  • A到D这个线段内的数字(不包括D)
  • 选择D点
  • D到F的点
  • F之后的点
    对于A到D来说,他是一直是上升趋势的,选择之后没有增加序列的长度
    D到F的点,他可以选,但是我们选择D点之后,还是会继续走到D到F的点上
    而F之后就更不用考虑了,因为这样选择序列的长度一定不会是最大的。

判断是否是怪点

我们在要判断的点的左右两边各假设一个值,left和right;
对于left来说

  • 等于0表示不知道数字的变化趋势
  • 大于0表示这个点之前是上升趋势
  • 小于0表示是下降趋势

对于right,判断方式就是right=nums[i+1]-nums[i];
这里需要注意,right==0时,说明这个点之后出现了平面,这里直接忽视即可,继续向后执行;
最后让left=right;即可向后继续判断

2.代码

class Solution {
public:
    int wiggleMaxLength(vector<int>& nums) {
        //left,right
        //分别统计左边的趋势,和右边的趋势,如果left*right<0就表示此时的这个点是极值点
        int n=nums.size();
        long long left=0,right=0;
        int count=0;
        for(int i=0;i<n-1;i++)//这里注意到n-1即可,因为最后一个一定是,而且还防止right那里越界
        {
            right=nums[i+1]-nums[i];
            if(right==0) continue;//说明现在这个点之后出现了平面,不用管
            if(left*right<=0)
            {
                count++;
                left=right;
            }
        }
        return count+1;
    }
};

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

相关文章:

  • Matlab 汽车ABS实现模糊pid和pid控制
  • JVM垃圾回收器全面解析:从核心概念到选型指南
  • Matlab 经验模态分解和时频图绘制
  • 结构型模式之外观模式:让复杂系统变简单的利器
  • golang中的结构体
  • FlowGram 简介:开源前端流程搭建引擎
  • iPaaS集成平台轻量化架构的重要性
  • 国际数字影像产业园,超甲级地标招商进行中​
  • 重生之我在学Vue--第17天 Vue 3 项目优化与部署
  • 本地部署github上资源可能出现问题总结
  • 以太坊AI代理与PoS升级点燃3月市场热情,2025年能否再创新高?
  • Chapter 4-11. Troubleshooting Congestion in Fibre Channel Fabrics
  • 【FLOYD+并查集】蓝桥杯算法提高 Degrees of Separation
  • Redis的IO多路复用机制:高效的网络通信设计
  • 聊一聊上线后出现Bug测试该如何处理?
  • 微服务无状态服务设计
  • 前端web worker提升性能实战案例
  • 设备安全:从系统更新到病毒防护——你的设备是“铜墙铁壁”还是“千疮百孔”?
  • rust笔记14:mod和use的使用区别
  • [STM32]新建工程||一个工程文件应该有哪些基本内容?