题目

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. 摆动序列(动态规划)相关推荐

  1. 376 Wiggle Subsequence 贪心解法以及证明

    376. Wiggle Subsequence 题目理解 给定一个数组,相邻两个数计算差值.差值排成的序列是正负相间的,那这个数组就是一个wiggle 数组.例如数组[1,7,4,9,2,5],差值序 ...

  2. 【Leetcode】376. Wiggle Subsequence

    Description: A sequence of numbers is called a wiggle sequence if the differences between successive ...

  3. 113. Leetcode 674. 最长连续递增序列 (动态规划-子序列问题)

    步骤一.确定状态: 确定dp数组及下标含义 dp[i]:以下标i为结尾的数组的连续递增的子序列长度为dp[i]. 注意这里的定义,一定是以下标i为结尾,并不是说一定以下标0为起始位置. 步骤二.推断状 ...

  4. LeetCode 376. 摆动序列(贪心 动态规划)

    文章目录 1. 题目 2. 解题 2.1 贪心 2.2 动态规划 1. 题目 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列.第一个差(如果存在的话)可能是正数或负数.少于两个 ...

  5. leetcode - 376. 摆动序列

    376. 摆动序列 -------------------------------------------- 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列.第一个差(如果存在 ...

  6. 【LeetCode】376. 摆动序列(图解)

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

  7. 力扣贪心算法专题(一)455.分发饼干 376. 摆动序列 53. 最大子序和 122.买卖股票的最佳时机II 1005.K次取反后最大化的数组和 思路及C++实现 贪心算法 动态规划

    文章目录 贪心算法 455.分发饼干 思路 步骤 代码 376. 摆动序列 贪心算法 思路 分析 代码 动态规划 思路 步骤 代码 53. 最大子序和 暴力解法 双层for循环 贪心算法 思路 分析 ...

  8. LeetCode 376. 摆动序列 中等难度

    376. 摆动序列 题目: 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列.第一个差(如果存在的话)可能是正数或负数.少于两个元素的序列也是摆动序列. 例如: [1,7,4,9 ...

  9. 【LeetCode每日一题】——376.摆动序列

    文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[解题思路] 七[题目提示] 八[题目进阶] 九[时间频度] 十[代码实现] 十一[提交结果] 一[题目类别 ...

最新文章

  1. win10恢复经典开始菜单_小编教你电脑如何升级win10
  2. 跟我一起学.NetCore之中间件(Middleware)简介和解析请求管道构建
  3. 机器人最新天赋符文天赋加点图_常德2020中小学机器人竞赛开赛 286名选手现场比拼技能...
  4. 百度网盘vep文件如何转换mp4_用这个软件,聊聊如何将MOV文件转换为MP4
  5. 信息学奥赛一本通 1910:【00NOIP普及组】计算器的改良 | 洛谷 P1022 [NOIP2000 普及组] 计算器的改良
  6. 查询mysql各个库和表的大小并按大小输出
  7. 从小小后视镜看物联网的生态(上)
  8. java close wait过多_HttpClient当HTTP连接的时候出现大量CLOSE_WAIT连接
  9. python redis 集群_python与java中使用redis集群
  10. linux下实现getch()函数的功能,Linux下实现getch()函数功能
  11. 人脸识别常用开源数据集大全
  12. 测绘航空摄影、摄影测量与遥感资质办理
  13. 数据分析师岗位需求分析
  14. Matlab读取股票数据
  15. Windows平台快速安装MongoDB和Robo 3T
  16. 2019牛客国庆集训派对day2 K 2018(容斥)
  17. 编写程序,根据输入的n,输出如下例所示的图形。
  18. ES - 查询所有数据
  19. Apache rewrite URL静态化配置与参数详解
  20. redis之地理位置

热门文章

  1. URAL - 1297 Palindrome(后缀数组+RMQ)
  2. QT乱码总结8.编码测试和总结三
  3. Windows 系统版本判断
  4. 基于 ida 的反汇编转换 Obj 的可行性 笔记(1)
  5. PostgreSQL学习笔记4之常用数据类型
  6. C++虚函数---我的理解
  7. 为什么编程语言初创公司那么少?
  8. 下次遇到嚣张的候选人就先这么问:系统变慢了你怎么搞?
  9. 曹大,欧神开新公众号了
  10. Django环境搭建