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

每日一题——376. 摆动序列

题目链接:376. 摆动序列 - 力扣(LeetCode)

代码:

class Solution {
public:
    int wiggleMaxLength(vector<int>& nums) {
        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;
            }
        }
        return result;
    }
};

将整个序列抽象到坐标轴上,这里指的摆动也就是坐标轴上的极值

统计到所有极值的个数,则为答案的摆动数。

符合极值的条件:prediff和curdiff相反

但有细节处理需要注意:

-有平坡的情况:只记录一个,靠右或者靠左,引入了=的情况(靠左:curdiff == 0,靠右:prediff == 0)

-只有两个数:因为这里的判断需要三个数才能完成,i,i-1,i+1,默认prediff=0(模拟第一个数a前还有一个数a,对于后面判断,两个数就会判断成两个极值)

-单调区间有平坡:在只有摆动变化的时候更新prediff,不然prediff =0,curdiff>0的时候记录一次,中间平坡,prediff变化,prediff = 0,curdiff>0的时候记录一次,最后prediff>0,curdiff<0的时候记录一次,中间就重复了,但中间的位置实际是prediff>0,curdiff>0,由于相同数值的情况,prediff更新为0,导致这种情况也被算成了一个极值,是错误的,所以只在有摆动的地方,在记录pre

http://www.dtcms.com/a/29938.html

相关文章:

  • 【MySQL】第八弹---全面解析数据库表的增删改查操作:从创建到检索、排序与分页
  • 实现rolabelimg对于dota格式文件的直接加载和保存
  • vertical-align
  • go 定时任务 gocron timer
  • 【阮一峰】16.类型声明文件
  • Day 45 卡玛笔记
  • Linux 内核网络设备驱动编程:私有协议支持
  • element-plus 根据条件显示多选框
  • 解放大脑!用DeepSeek自动生成PPT!
  • 面试官询问项目前后端人员配比之高分示范回答
  • 蓝桥杯核心内容
  • draw.io:开源款白板/图表绘制利器
  • deepseek与其他大模型配合组合
  • VUE3+TS+element-plus项目从0开始入门 - 创建项目、认识基本结构
  • python与pycharm如何设置文件夹为源代码根目录
  • 图解MySQL【日志】——Redo Log
  • js中 ES6 新特性详解
  • Python爬虫实战:从零到一构建数据采集系统
  • 使用 INFINI Console 配置集群监控 Webhook 通知指南
  • C++ 设计模式-策略模式
  • 从波士顿动力到Figure AI:探寻人工智能驱动的机器人智能化
  • 【记录54】渐变色 linear-gradient / radial-gradient
  • 大语言模型基础
  • 2025寒假天梯训练7
  • 【鸿蒙开发】第四十三章 Notification Kit(用户通知服务)
  • .Net面试宝典【刷题系列】
  • 《筑牢元宇宙根基:AI与区块链的安全信任密码》
  • 为AI聊天工具添加一个知识系统 之114 详细设计之55 知识表征
  • 深入解析BFS算法:C++实现无权图最短路径的高效解决方案
  • bboss v7.3.5来袭!新增异地灾备机制和Kerberos认证机制,助力企业数据安全