03贪心:摆动序列

03贪心:摆动序列

376. 摆动序列

局部最优:删除单调坡度上的节点(不包括单调坡度两端的节点),那么这个坡度就可以有两个局部峰值

整体最优:整个序列有最多的局部峰值,从而达到最长摆动序列

局部最优推出全局最优,并举不出反例,那么试试贪心!

实际操作上,其实连删除的操作都不用做,因为题目要求的是最长摆动子序列的长度,所以只需要统计数组的峰值数量就可以了(相当于是删除单一坡度上的节点,然后统计长度)

这就是贪心所贪的地方,让峰值尽可能的保持峰值,然后删除单一坡度上的节点

这是我们思考本题的一个大题思路,但本题要考虑三种情况:

  1. 情况一:上下坡中有平坡
  2. 情况二:数组首尾两端
  3. 情况三:单调坡中有平坡
java 复制代码
class Solution {//贪心:要想成为摆动序列,只需要吧每一条单调坡除峰值以外的其他元素删除即可(局部最优),那么整个数组就是摆动序列(整体最优)
    public int wiggleMaxLength(int[] nums) {
        //一般情况:prediff记录左边的方向,curdiff记录右边的方向,如果两值一正一负则result++
        int prediff = 0;
        int curdiff = 0;
        int result = 1;//@2
        /*几点特殊情况
        1.上下坡中有平坡
        1 2 2 1 prediff = 0,curdiff != 0 @1
        2.考虑首尾元素
        1 2 这是两个长度,假设数组是1 1 2,起始位置左边假设是个平坡,那么就满足第一种特殊情况可以加一,另外,总是假设数组的最右侧是一个长度,因为它必是一个峰值@2
        3.单调坡中有平坡
        1 2 2 3 (我们判断的是最后一个数字也就是第二个2)对于第二个2来说,prediff=0,curdiff!=0,应该算一个,但是并不是,因为这不是上下坡
        我们怎么知道不是呢,得通过prediff来判断,如果这个prediff记录的是1 2之间的坡度我就能判断出来这不是答案,也就是说prediff的更新下手解决
        解决办法:
        当坡度有变化的时候再进行更新,就是说result有变化的时候,坡度就肯定有变化
        回到第一种特殊情况,1 2 2 1prediff记录1 2 的坡度,curdiff记录的是2 1的坡度,符合
        */
        for(int i = 0; i < nums.length - 1; i++) {//因为假设最后一个数已经计算上了,res=1
            curdiff = nums[i + 1] - nums[i];
            //prediff * curdiff <= 0不行,这只能保证两个坡度至少有一个为0,如果是0 0的话就错了
            if((prediff <= 0 && curdiff > 0) || (prediff >= 0 && curdiff < 0)) {//@1   如果curdiff等于0就不用管了,向右遍历就可以了
                result++;
                prediff = curdiff;//@3
            }
            //prediff = curdiff;不用且不能实时更新
        }

        return result;
    }
}
相关推荐
学逆向的3 分钟前
汇编——位运算
开发语言·汇编·算法·网络安全
可编程芯片开发18 分钟前
基于simulink的PEM燃料电池控制系统建模与仿真,对比PID,积分分离以及滑模控制器
算法
学究天人34 分钟前
数学公理体系大全:Comprehensive Collection of Mathematical Axiom Systems(卷2)
算法·数学建模·动态规划·图论·抽象代数·拓扑学
玛卡巴卡ldf1 小时前
【LeetCode 手撕算法】(细节知识点总结)
java·数据结构·算法·leetcode·力扣
wanzehongsheng2 小时前
零碳产业园光伏园区光伏电站追踪对比固定:发电增益技术边界分析
算法·光伏发电·光伏·零碳园区·太阳能追光·低碳环保·追踪电站
KobeSacre2 小时前
CyclicBarrier 源码
java·jvm·算法
手写码匠2 小时前
注意力机制全家桶:从 Multi-Head 到 GQA 再到 Flash Attention 的手写实现
人工智能·深度学习·算法·aigc
大鱼>2 小时前
模型公平性与偏差检测:AI伦理实战指南
人工智能·深度学习·算法·机器学习
学究天人3 小时前
数学公理体系大全:Comprehensive Collection of Mathematical Axiom Systems(卷3.2)
线性代数·算法·机器学习·数学建模·动态规划·抽象代数·拓扑学
tkevinjd3 小时前
力扣322-零钱兑换
算法·leetcode·动态规划