Leetcode376

链接:力扣 。

题目:

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

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

给定一个整数序列,返回作为摆动序列的最长子序列的长度。 通过从原始序列中删除一些(也可以不删除)元素来获得子序列,剩下的元素保持其原始顺序。

示例1:

输入:nums = [1,7,4,9,2,5]
输出:6
解释:整个序列均为摆动序列。

示例2:

输入:nums = [1,17,5,10,13,15,10,5,16,8]
输出:7
解释:这个序列包含几个长度为 7 摆动序列,其中一个可为[1,17,10,13,10,16,8]。

思路:

用示例二来举例,如图所示:

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

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

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

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

本题代码实现中,还有一些技巧,例如统计峰值的时候,数组最左面和最右面是最不好统计的。例如序列[2,5],它的峰值数量是2,如果靠统计差值来计算峰值个数就需要考虑数组最左面和最右面的特殊情况。

参考代码:

class Solution {
public:int wiggleMaxLength(vector<int>& nums) {if (nums.size() <= 1) {return nums.size();}int pre = 0;int result = 1;for (int i = 1; i < nums.size(); i++) {if ((pre >= 0 && nums[i] - nums[i - 1] < 0) || (pre <= 0 && nums[i] - nums[i - 1] > 0)) {pre = nums[i] - nums[i - 1];result++;}}return result;}
};

力扣刷题 DAY_76 贪心相关推荐

  1. LeetCode力扣刷题——简单易懂的贪心算法

    贪心 一.算法解释 采用贪心的策略,保证每次操作都是局部最优的,从而使最后得到的结果是全局最优的. 贪心算法问题需要满足的条件: (1)最优子结构:规模较大的问题的解由规模较小的子问题的解组成,规模较 ...

  2. 力扣刷题pdf(java版本,内含暗黑版和光明版),都在这里了

    BAT大佬力扣刷题pdf,都在这里了! ​相信很多小伙伴刷题的时候面对力扣上近两千道题目,感觉无从下手! 我找了很久,今天终于让找到了Java版leetcode算法题解笔记,强烈建议先按照本篇介绍pd ...

  3. 教你创建电脑、手机同步的markdown云笔记--力扣刷题力荐!

    开篇先致歉 其他不谈,开篇必须先给各位读者道个歉,年后工作上比较忙,加上最近闲暇的时间都用来在力扣上刷算法题了,导致公众号断更有些严重啊.再加上年后将健身减重提上了日程,时间上就更显的捉襟见肘了. 不 ...

  4. 《剑指Offer》力扣刷题笔记(03-10)

    <剑指Offer>力扣刷题笔记(03-10) 最近确实有点闲,想在进组搬砖之前找点有意义的事干,于是,就开始刷<剑指Offer>.<程序员面试金典>等书上的题目,也 ...

  5. 力扣刷题之二叉树的层序遍历

                                                      Welcome to you, 每日一刷系列 二叉树的层序遍历 二叉树的层序遍历II 二叉树的右视图 ...

  6. 『力扣刷题』5275_找出井字棋的获胜者 解题代码

    LeetCode-cn 力扣刷题 LeetCode-cn力扣刷题目录 165周赛 5275_找出井字棋的获胜者 * 5275. 找出井字棋的获胜者 显示英文描述* 用户通过次数0* 用户尝试次数0* ...

  7. 『力扣刷题』5276_不浪费原料的汉堡制作方案 解题代码

    LeetCode-cn 力扣刷题 LeetCode-cn力扣刷题目录 165周赛 5276_不浪费原料的汉堡制作方案 * 5276. 不浪费原料的汉堡制作方案 显示英文描述* 用户通过次数212* 用 ...

  8. 『力扣刷题』5238_找出给定方程的正整数解 解题代码

    html: embed_local_images: true embed_svg: true offline: true toc: undefined print_background: false ...

  9. 力扣刷题全局变量WA,局部变量AC的问题

    力扣刷题全局变量WA,局部变量AC问题 题目 原因 题目 golang力扣leetcode 1219.黄金矿工 原因 今天在刷题的时候,遇到一个现象,本地跑测试全部通过,一提交就错错错,非常离谱 然后 ...

  10. 力扣刷题-前k个高频元素

    力扣刷题-前k个高频元素 题目: 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素.你可以按 任意顺序 返回答案. 示例 1: 输入: nums = [1,1,1,2 ...

最新文章

  1. DHCP之一 DHCP的部署安装
  2. 字符串工具类、数组工具类、集合工具类、转型操作工具类、编码与解码操作工具类...
  3. java IO(输入输出) 字节流
  4. raft引入no-op解决了什么问题
  5. JEPaas功能_isEmpty(b.getValue())?“doSave“:“doUpdate“;
  6. 搜集的一些有意思的牛人博客地址
  7. Python3.x建立服务器自动监测端口数据,客户端测试服务器
  8. VS2015 property manager
  9. JUnit报错:Java.lang.Exception: No runnable methods解决方案
  10. redis与mysql性能对比、redis缓存穿透、缓存雪崩
  11. unix环境高级编程(第三版)-读书笔记1
  12. 使用QT调用FFMPEG库部署到Android设备、完成视频音频应用开发
  13. 教你使用反格式化工具恢复格式化数据!
  14. matlab 安装时报错: dsp_doc_en_common 时检测到以下错误
  15. 文件服务器异地容灾,服务器异地容灾
  16. 裸金属服务器能虚拟化吗,市场需求多样化,裸金属服务器如何“吃得开”?
  17. JVM(2):垃圾收集器与gc
  18. 企业邮箱网页登录入口,网页电子邮箱怎么注册?
  19. 圣地亚哥大学 学计算机 咋样,美国加州大学圣地亚哥分校的计算机专业怎么样?...
  20. usb接上计算机没反应怎么办,u盘插上去电脑没反应怎么办 u盘插上后无任何反应的解决教程...

热门文章

  1. redis读写分离之lettuce
  2. 没有 本地计算机策略组,win10家庭版没有本地组策略编辑器怎么办
  3. 填充因子设置的一般性准则和指导
  4. ecshop 模板支持php,ecshop模板文件不支持php语句解决办法
  5. php ansiix99mac,华擎推出X99E-ITX/ac主板,终于可以把Haswell-E装进小钢炮
  6. IOC 之深入理解 Spring IoC
  7. linux红帽子怎么配置dhcp,红帽7 配置dhcp服务器
  8. 最新的QQ跳转支付宝并自动领红包脚本。
  9. 《亲自动手写一个深度学习框架》-专题视频课程-广州市老刘
  10. 文献阅读 - Expressive Expression Mapping with Ratio Images