leetcode 376. Wiggle Subsequence | 376. 摆动序列(动态规划)
题目
https://leetcode.com/problems/wiggle-subsequence/
题解
刷题大概确实是有效果的吧…
印象中,这算是今日第二道,全局第三道没看答案写出来的 dp …
找到 dp 的套路,总会有让 dp 不再成为玄学的那一天,指日可待…
DP 思路
也不全是自己想的思路。这道题与 leetcode 300. Longest Increasing Subsequence | 300. 最长递增子序列(动态规划)非常类似,思路很大程度上受到了这道题的启发,也就是在计算连续子序列的问题时,dp 用来记录强制包含当前元素时的最长子序列长度。
与 第 300 题 “最长递增子序列” 不同的是,本题要求子序列 增减性不断交替,所以还需要考虑 前一个序列的末尾元素的增减性。为此,我们创建一个 incr[] 数组,incr[j] 用来记录当前 j 位置最长子序列的末尾元素的增减性,以便和后面 j 位置上的元素相呼应。
顺便贴上几乎看不懂的草稿,记录一下“尝试”的过程(对于 dp 问题,可以先用前几个数尝试一下,找感觉)
class Solution {public int wiggleMaxLength(int[] nums) {if (nums.length == 1) return 1;if (nums.length == 2) return nums[0] == nums[1] ? 1 : 2;boolean[] incr = new boolean[nums.length];int[] dp = new int[nums.length];dp[0] = 1;for (int i = 1; i < dp.length; i++) {dp[i] = 1;for (int j = 0; j < i; j++) {if (nums[j] == nums[i]) continue;if (j == 0 || incr[j] == nums[j] > nums[i]) {if (dp[i] < dp[j] + 1) {dp[i] = dp[j] + 1;incr[i] = nums[j] < nums[i];}}}}return dp[dp.length - 1];}
}
leetcode 376. Wiggle Subsequence | 376. 摆动序列(动态规划)相关推荐
- 376 Wiggle Subsequence 贪心解法以及证明
376. Wiggle Subsequence 题目理解 给定一个数组,相邻两个数计算差值.差值排成的序列是正负相间的,那这个数组就是一个wiggle 数组.例如数组[1,7,4,9,2,5],差值序 ...
- 【Leetcode】376. Wiggle Subsequence
Description: A sequence of numbers is called a wiggle sequence if the differences between successive ...
- 113. Leetcode 674. 最长连续递增序列 (动态规划-子序列问题)
步骤一.确定状态: 确定dp数组及下标含义 dp[i]:以下标i为结尾的数组的连续递增的子序列长度为dp[i]. 注意这里的定义,一定是以下标i为结尾,并不是说一定以下标0为起始位置. 步骤二.推断状 ...
- LeetCode 376. 摆动序列(贪心 动态规划)
文章目录 1. 题目 2. 解题 2.1 贪心 2.2 动态规划 1. 题目 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列.第一个差(如果存在的话)可能是正数或负数.少于两个 ...
- leetcode - 376. 摆动序列
376. 摆动序列 -------------------------------------------- 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列.第一个差(如果存在 ...
- 【LeetCode】376. 摆动序列(图解)
376. 摆动序列 一.问题 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列.第一个差(如果存在的话)可能是正数或负数.少于两个元素的序列也是摆动序列. 例如, [1,7,4, ...
- 力扣贪心算法专题(一)455.分发饼干 376. 摆动序列 53. 最大子序和 122.买卖股票的最佳时机II 1005.K次取反后最大化的数组和 思路及C++实现 贪心算法 动态规划
文章目录 贪心算法 455.分发饼干 思路 步骤 代码 376. 摆动序列 贪心算法 思路 分析 代码 动态规划 思路 步骤 代码 53. 最大子序和 暴力解法 双层for循环 贪心算法 思路 分析 ...
- LeetCode 376. 摆动序列 中等难度
376. 摆动序列 题目: 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列.第一个差(如果存在的话)可能是正数或负数.少于两个元素的序列也是摆动序列. 例如: [1,7,4,9 ...
- 【LeetCode每日一题】——376.摆动序列
文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[解题思路] 七[题目提示] 八[题目进阶] 九[时间频度] 十[代码实现] 十一[提交结果] 一[题目类别 ...
最新文章
- win10恢复经典开始菜单_小编教你电脑如何升级win10
- 跟我一起学.NetCore之中间件(Middleware)简介和解析请求管道构建
- 机器人最新天赋符文天赋加点图_常德2020中小学机器人竞赛开赛 286名选手现场比拼技能...
- 百度网盘vep文件如何转换mp4_用这个软件,聊聊如何将MOV文件转换为MP4
- 信息学奥赛一本通 1910:【00NOIP普及组】计算器的改良 | 洛谷 P1022 [NOIP2000 普及组] 计算器的改良
- 查询mysql各个库和表的大小并按大小输出
- 从小小后视镜看物联网的生态(上)
- java close wait过多_HttpClient当HTTP连接的时候出现大量CLOSE_WAIT连接
- python redis 集群_python与java中使用redis集群
- linux下实现getch()函数的功能,Linux下实现getch()函数功能
- 人脸识别常用开源数据集大全
- 测绘航空摄影、摄影测量与遥感资质办理
- 数据分析师岗位需求分析
- Matlab读取股票数据
- Windows平台快速安装MongoDB和Robo 3T
- 2019牛客国庆集训派对day2 K 2018(容斥)
- 编写程序,根据输入的n,输出如下例所示的图形。
- ES - 查询所有数据
- Apache rewrite URL静态化配置与参数详解
- redis之地理位置