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

Leetcode 376. 摆动序列

Leetcode 376. 摆动序列

题目

如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。

例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。

相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。
子序列 可以通过从原始序列中删除一些(也可以不删除)元素来获得,剩下的元素保持其原始顺序。

给你一个整数数组 nums ,返回 nums 中作为 摆动序列 的 最长子序列的长度 。

思路

  • 贪心算法:在一段单调序列中,递增或者递减,保留头尾的节点,出去中间所有的节点,就可以峰值,组成单调序列
  • 但是本题对于第一个元素和最后一个元素都是认为是峰值
  • 我们初始化一个curdiff = nums[i + 1] - nums[i]; 在初始化一个preDiff = 0
  • 对于第一个元素 那肯定是prediff = 0 && curdiff >0 或者是curdiff < 0 && prediff =0 峰值加一
  • 然后prediff = curdiff 更新前一个差值
  • 对于最后一个元素使用nums[i + 1] - nums[i] = curdiff 正常判断即可

代码

class Solution {
public:
    int wiggleMaxLength(vector<int>& nums) {
        if(nums.size() <= 1)
        {
            return nums.size();
        }
        int curDiff = 0;// 当前一对差值
        int preDiff = 0;// 前一对差值
        int result = 1;// 峰值个数 初始化1
        for(int i  = 0; i < nums.size() - 1; i++)
        {
            // i = nums.size() 
            curDiff = nums[i + 1] - nums[i];// 不可以写成 i < nums.size() 否则 会越界
            // 那么一开始前一对差值 就可以看成0  preDiff = 0
            // 对于一段子序列 如果是单调的 只要保留头和尾 中间所有节点全部去掉即可 
            // 等于0 是意味着[2,5] 这种情况

            // 出现峰值
            if((curDiff > 0 && preDiff <= 0) || (curDiff < 0 && preDiff >= 0))
            {
                result++;// 峰值个数加一
                preDiff = curDiff;// 更新  当前差值变成前一个差值
            }
        }
        return result;
    }
};

相关文章:

  • Linux12 crontab 定时任务 at 一次性任务
  • 【树莓派】项目中找不到第三方库的问题
  • leetcode136,137,260:只出现一次的数字 | || |||
  • mysql安装8.0详细操作
  • 《算法竞赛进阶指南》,USACO2007 牛站
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • 【MindSpore易点通】如何将PyTorch源码转成MindSpore低阶APIP,并在Ascend芯片上实现单机单卡训练
  • vue前端 页面样式强制覆盖
  • WPF 控件专题 ScrollBar控件详解
  • DocuWare 庆祝文档管理云解决方案推出10 周年
  • Busybox实践2:分析busybox文件链接原理并编程模拟实现自己的busybox文件
  • 12030.LMK03000时钟合成器
  • el-table表格进行排序 清除排序和清除排序箭头的高亮图标
  • 5G网络用户面时延测量
  • StreamSets解析MySQL Binlog写入Kafka
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • JavaScript设计模式与开发实践系列之策略模式
  • leetcode386. Lexicographical Numbers
  • overflow: hidden IE7无效
  • PAT A1017 优先队列
  • Python利用正则抓取网页内容保存到本地
  • scrapy学习之路4(itemloder的使用)
  • Spring核心 Bean的高级装配
  • Unix命令
  • use Google search engine
  • 电商搜索引擎的架构设计和性能优化
  • 记录一下第一次使用npm
  • 讲清楚之javascript作用域
  • 嵌入式文件系统
  • 全栈开发——Linux
  • 携程小程序初体验
  • 新版博客前端前瞻
  • 优化 Vue 项目编译文件大小
  • 再谈express与koa的对比
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​2021半年盘点,不想你错过的重磅新书
  • #1014 : Trie树
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)ssm码农论坛 毕业设计 231126
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (四) Graphivz 颜色选择
  • (转载)利用webkit抓取动态网页和链接
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • **PHP二维数组遍历时同时赋值
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET Core Web APi类库如何内嵌运行?
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .net6使用Sejil可视化日志
  • /etc/sudoer文件配置简析
  • /proc/vmstat 详解
  • [ IO.File ] FileSystemWatcher
  • [ linux ] linux 命令英文全称及解释