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

03贪心:摆动序列

03贪心:摆动序列

376. 摆动序列

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

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

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

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

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

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

  1. 情况一:上下坡中有平坡
  2. 情况二:数组首尾两端
  3. 情况三:单调坡中有平坡
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 @12.考虑首尾元素1 2 这是两个长度,假设数组是1 1 2,起始位置左边假设是个平坡,那么就满足第一种特殊情况可以加一,另外,总是假设数组的最右侧是一个长度,因为它必是一个峰值@23.单调坡中有平坡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=1curdiff = 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;}
}
http://www.lryc.cn/news/171035.html

相关文章:

  • javascript获取元素在浏览器中工作区域的左、右、上、下距离,或带滚动条的元素在页面中的大小
  • VSCode 安装使用教程 环境安装配置 保姆级教程
  • c盘中temp可以删除吗?appdata\local\temp可以删除吗?
  • Java手写聚类算法
  • 解密Java多线程中的锁机制:CAS与Synchronized的工作原理及优化策略
  • solid works草图绘制与设置零件特征的使用说明
  • vue3使用router.push()页面跳转后,该页面不刷新问题
  • 如何理解数字工厂管理系统的本质
  • 笔记1.3 数据交换
  • 实时车辆行人多目标检测与跟踪系统(含UI界面,Python代码)
  • 谷歌AI机器人Bard发布强大更新,支持插件功能并增强事实核查;全面整理高质量的人工智能、机器学习、大数据等技术资料
  • NI SCXI-1125 数字量控制模块
  • 链表oj题1(Leetcode)——移除链表元素,反转链表,链表的中间节点,
  • 【libuv】与uvgrtrp的_SSIZE_T_定义不同
  • 安卓ROM定制 修改必备常识-----初步了解system系统分区文件夹的基本含义 【二】
  • GPT会统治人类吗
  • win系统环境搭建(六)——Windows安装nginx
  • Java中使用BigDecimal类相除保留两位小数
  • 激光雷达在ADAS测试中的应用与方案
  • malloc与free
  • 计算周包材,日包材用来发送给外围系统
  • R语言柱状图直方图 histogram
  • Linux磁盘管理:最佳实践
  • uni-app:通过三目运算动态增加样式效果(class)
  • API安全
  • 手写一个翻页功能
  • element show-overflow-tooltip 复制
  • 【C语言】指针的进阶(三)—— 模拟实现qsort函数以及指针和数组的笔试题解析
  • Python 图像处理库PIL ImageOps笔记
  • 全球南方《乡村振兴战略下传统村落文化旅游设计》许少辉八一新枝——2023学生开学季辉少许