leetcode-376 摆动序列
如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。
例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。
给定一个整数序列,返回作为摆动序列的最长子序列的长度。 通过从原始序列中删除一些(也可以不删除)元素来获得子序列,剩下的元素保持其原始顺序。
示例 1:
输入: [1,7,4,9,2,5]
输出: 6
解释: 整个序列均为摆动序列。
示例 2:
输入: [1,17,5,10,13,15,10,5,16,8]
输出: 7 解释: 这个序列包含几个长度为 7
摆动序列,其中一个可为[1,17,10,13,10,16,8]。
方法一:一次遍历
使用两个变量,保存当前状态和上一个状态:curr,prev;
递增和递减 数值不同,只有当前状态curr和上一个状态prev数值不等时才能说明是一个摆动序列,则 摆动序列长度增加
实现如下:
int wiggleMaxLength(vector<int>& nums) {if (nums.size() < 2) {return nums.size();}int i;int res = 1;int prev = 0;for (i = 1; i < nums.size(); ++i) {if (nums[i] == nums[i-1]) {continue;}int curr = (nums[i]> nums[i-1]) ? 1 : -1;if (curr != prev) {res ++;} prev = curr;}return res;
}
方法二:动态规划
使用两个状态:up,down
up代表当前元素nums[i]结尾的最长摇摆序列,需满足递增条件;
down代表当前元素nums[i]结尾的最长摇摆序列,需满足递减条件;
最终的结果仅需要取两个状态中最大的即为最长的摇摆序列
实现如下:
int wiggleMaxLength(vector<int>& nums) {if (nums.size() < 2) {return nums.size();}int down = 1, up = 1;for (int i = 1; i < nums.size(); i++) {//此时是递增状态,那么需在上一个递减状态的最大值基础上加1if (nums[i] > nums[i - 1]) up = down + 1;//此时是递减状态,那么需在上一个递增状态的最大值基础上加1else if (nums[i] < nums[i - 1])down = up + 1;}return std::max(down, up);
}
leetcode-376 摆动序列相关推荐
- leetcode - 376. 摆动序列
376. 摆动序列 -------------------------------------------- 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列.第一个差(如果存在 ...
- LeetCode 376. 摆动序列 中等难度
376. 摆动序列 题目: 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列.第一个差(如果存在的话)可能是正数或负数.少于两个元素的序列也是摆动序列. 例如: [1,7,4,9 ...
- LeetCode 376. 摆动序列(贪心 动态规划)
文章目录 1. 题目 2. 解题 2.1 贪心 2.2 动态规划 1. 题目 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列.第一个差(如果存在的话)可能是正数或负数.少于两个 ...
- leetcode 376. 摆动序列 思考分析
目录 题目 思路分析 代码 总结 题目 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列.第一个差(如果存在的话)可能是正数或负数.少于两个元素的序列也是摆动序列. 例如, [1 ...
- leetcode 376. 摆动序列(dp)
如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列.第一个差(如果存在的话)可能是正数或负数.少于两个元素的序列也是摆动序列. 例如, [1,7,4,9,2,5] 是一个摆动序列, ...
- [leetcode]376. 摆动序列
原文:https://leetcode-cn.com/problems/wiggle-subsequence/solution/bai-dong-xu-lie-by-leetcode/ 给定一个整数序 ...
- Leetcode 376. 摆动序列 解题思路及C++实现
解题思路: 使用贪心算法的思想. 在例子 [1,17,5,10,13,15,10,5,16,8]中,[1, 17].[17, 5]这前面的两个序列就直接都选择了,没有问题,对于后面[5, 10, 13 ...
- 【LeetCode】376. 摆动序列(图解)
376. 摆动序列 一.问题 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列.第一个差(如果存在的话)可能是正数或负数.少于两个元素的序列也是摆动序列. 例如, [1,7,4, ...
- 【LeetCode每日一题】——376.摆动序列
文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[解题思路] 七[题目提示] 八[题目进阶] 九[时间频度] 十[代码实现] 十一[提交结果] 一[题目类别 ...
- 贪心1|455.分发饼干|376. 摆动序列|53. 最大子序和
贪心1|455.分发饼干|376. 摆动序列|53. 最大子序和 一.455.分发饼干 题目连接:455. 分发饼干 - 力扣(LeetCode) 思路1:用贪心思想,将饼干数组和胃口数组先排序,然后 ...
最新文章
- MySQL的共享锁和独占锁
- Element UI级联选择器(Cascader)获取级联对象
- CCNA-第六篇-静态路由+动态路由开头
- 论文阅读笔记(一)【Journal of Machine Learning Research】Natural Language Processing (Almost) from Scratch(未完)
- sift算法_单应性Homograph估计:从传统算法到深度学习
- Java并发专题 带返回结果的批量任务运行 CompletionService ExecutorService.invokeAll
- HttpContext.Current.Cache在控制台下不工作
- Windows下Hadoop eclipse开发平台搭建
- linux mv命令: 移动文件或文件改名
- Objective-C:内存管理的小结
- 使用opencv-python画OpenCV LOGO
- 2019 最新计算机技能排名出炉:Python 排第三,第一名是...
- c 调用java map_如何从C中的map迭代器调用类成员函数?
- 学校网络认证服务器无响应,校园网常见问题
- m115b linux 驱动下载,m115b驱动下载
- 目标管理 督查督办系统
- Server 2003无法访问共享。您可能没有权限使用网络资源
- html 毛笔书写效果,利用canvas实现毛笔字帖(三)
- 『踩坑』pyechart绘图不出图的解决方案
- 惠普服务器停电后进不了系统,惠普电脑出现了startup menu 然后按f10进不去bios。进入的是Windows启动项...
热门文章
- [2017.02.23] Java8 函数式编程
- Java GC 日志详解
- 【学习笔记】Silverlight框架:Jounce(4)——事件通信
- 乌鲁木齐网络赛J题(最小费用最大流模板)
- java的不足_Java不足之我见
- 小程序picker_小程序·云开发实战 - 迷你微博
- ffmpeg linux安装_ffmpeg命令中文手册
- Bqq服务器的缓存文件放什么目录,如何使文件系统缓存失效? - How to invalidate the file system cache? - 开发者知识库...
- git ssh创建分支_Git(2):在gitlab中创建开发用户,以及master分支的安全管理
- hadoop集群_Ambari搭建hadoop集群