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

[贪心算法] 摆动序列

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;
    }
};

相关文章:

  • 佰泰盛世公司推出最新低成本的DSP功放音箱解决方案
  • 仿RabbitMQ的消息队列
  • 数据集格式转换——json2txt、xml2txt、txt2json【复制就能用】
  • 专栏特辑--如何查询Essential Science Indicators (ESI)- 高被引论文--我的文章和高引文章的差距
  • ccfcsp3402矩阵重塑(其二)
  • 2025-03-18 学习记录--C/C++-PTA 习题4-9 打印菱形图案
  • Python 阶段一综合案例之质数判断算法
  • AGI大模型(8):提示词的安全与防护
  • 无人机吊舱模块更换技术难点分析!
  • Redis-锁-商品秒杀防止超卖
  • docker安装rabbitmq
  • Ubuntu24.04 启动后突然进入tty,无法进入图形界面
  • AI 技术在智慧农业中的应用实践
  • 前缀和 之 哈希表 之 和 的奇偶与倍数
  • MySQL InnoDB引擎的锁机制详解
  • 蓝桥杯每日一题
  • 汽车PKE无钥匙进入系统一键启动系统定义与原理
  • 需求文档(PRD,Product Requirement Document)的基本要求和案例参考:功能清单、流程图、原型图、逻辑能力和表达能力
  • 晶艺代理,100V3.5A高耐压LA1823完全替换MP9487--启烨科技有限公司
  • 第一章:Tailwind CSS基础与项目设置 - 第三节:GitHub界面分析 - 设计规范与布局系统
  • 2025江西跨境电子商务发展交流会召开,探索行业发展新趋势
  • 长安汽车辟谣作为二级企业并入东风集团:将追究相关方责任
  • 农行原首席专家兼浙江省分行原行长冯建龙主动投案,正接受审查调查
  • 网友建议平顶山请刘昊然任旅游宣传大使,市委:有此设想,正申请经费
  • “两高”出台司法解释,严打破坏黑土地资源犯罪
  • 贵州省黔西市发生载人游船侧翻事故