当前位置: 首页 > 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

相关文章:

  • 【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++ 设计模式-策略模式
  • 美国务卿:俄方将在数天内提出俄乌停火大纲
  • 西尔艾力·外力任吐鲁番市副市长、代理市长,朱继坤任副市长
  • 特朗普宣布打造“金穹”导弹防御系统,计划3年内运转
  • 国家能源局:4月份全社会用电量同比增长4.7%
  • 中国海警就菲向非法“坐滩”仁爱礁军舰运补发表谈话
  • 著名文学评论家、原伊犁师范学院院长吴孝成逝世