【算法刷题 | 贪心算法02】4.24(摆动序列)

文章目录

3.摆动序列

3.1题目

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

  • 例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。
  • 相反,[1, 4, 7, 2, 5][1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。

子序列 可以通过从原始序列中删除一些(也可以不删除)元素来获得,剩下的元素保持其原始顺序。

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

  • 示例一:

    输入:nums = [1,7,4,9,2,5]
    输出:6
    解释:整个序列均为摆动序列,各元素之间的差值为 (6, -3, 5, -7, 3) 。

  • 示例二:

    输入:nums = [1,17,5,10,13,15,10,5,16,8]
    输出:7
    解释:这个序列包含几个长度为 7 摆动序列。
    其中一个是 [1, 17, 10, 13, 10, 16, 8] ,各元素之间的差值为 (16, -7, 3, -3, 6, -8) 。

  • 示例三:

    输入:nums = [1,2,3,4,5,6,7,8,9]
    输出:2

3.2解法:贪心

3.2.1贪心思路

3.2.2代码实现

java 复制代码
	public int wiggleMaxLength(int[] nums) {
        int prediff=0;  //上一个元素的差值
        int curdiff=0;  //下一个元素与该元素的差值
        int res=1;      //初始为1,默认右边为峰值
        for(int i=0;i<nums.length-1;i++){
            //判断是否出现峰值
            curdiff=nums[i+1]-nums[i];
            if((prediff>=0 && curdiff<0 )|| (prediff<=0 && curdiff>0)){
                //该元素为谷顶或谷底
                res++;
                //只有该元素为谷顶或谷底,才更新prediff(避免单调坡中有平坡)
                prediff=curdiff;
            }
        }
        return res;
    }
相关推荐
lu_rong_qq40 分钟前
决策树 DecisionTreeClassifier() 模型参数介绍
算法·决策树·机器学习
Abladol-aj42 分钟前
并发和并行的基础知识
java·linux·windows
清水白石00842 分钟前
从一个“支付状态不一致“的bug,看大型分布式系统的“隐藏杀机“
java·数据库·bug
吾日三省吾码6 小时前
JVM 性能调优
java
LNTON羚通7 小时前
摄像机视频分析软件下载LiteAIServer视频智能分析平台玩手机打电话检测算法技术的实现
算法·目标检测·音视频·监控·视频监控
弗拉唐7 小时前
springBoot,mp,ssm整合案例
java·spring boot·mybatis
oi778 小时前
使用itextpdf进行pdf模版填充中文文本时部分字不显示问题
java·服务器
少说多做3438 小时前
Android 不同情况下使用 runOnUiThread
android·java
知兀8 小时前
Java的方法、基本和引用数据类型
java·笔记·黑马程序员