动态规划---子序列问题

一)最长递增子序列:

300. 最长递增子序列 - 力扣(LeetCode)

算法原理:

1.定义一个状态表示:经验+题目要求

dp[i]表示,以i位置为结尾,最长递增子序列的长度

中心思路就是找到以i位置为结尾的所有递增子序列,然后找到递增子序列中最长的一个子序列

2.根据状态表示推导状态转移方程

像子序列子数组这样的状态转移方程的推导,都是针对于如何构成这个子序列,或者是如何构成这个子数组,来划分问题的,同时以i位置为结尾的递增子序列,可以分成一下几类:

2.1)单独自己构成一个递增子序列,那么长度就是1

2.2)和前面的元素进行结合构成子序列:要么i位置的元素和i-1位置的元素进行结合成子序列

要么是和i-2位置的元素构成子序列,要么是和i-3位置的元素构成子序列

2.3)先找到以j位置为结尾的最长递增子序列的长度,并且array[i]>array[j],然后再加上array[j]的值,就构成了以i为结尾的最长递增子序列

3.初始化+填表顺序:从左向右

对于长度问题的初始化,一般都是将dp表中的值初始化成元素最差的状态

4.返回值:返回dp表里面的最大值

class Solution {public int lengthOfLIS(int[] nums) {int[] dp=new int[nums.length];int maxlen=Integer.MIN_VALUE;
//1.单独一个元素就可以构成子序列for(int i=0;i<dp.length;i++){dp[i]=1;}
//2.j从0开始,j<=i进行遍历for(int i=0;i<nums.length;i++){for(int j=0;j<i;j++){if(nums[i]>nums[j]){dp[i]=Math.max(dp[j]+1,dp[i]);}}maxlen=Math.max(dp[i],maxlen);}return maxlen;}
}

2)摆动序列:这个题和之前做的湍流子数组有点像

1)定义一个状态标识:

先找到以i位置元素为结尾的所有子序列中,再找到最长的摆动序列的长度

376. 摆动序列 - 力扣(LeetCode)

2)根据状态表示推导状态转移方程:

当以某一个位置为结尾的时候,最后呈现的趋势可能是下降的趋势也有可能是上升的趋势,所以说如果想以最后一个位置进行研究问题的话,是可以进行细分出两种状态的,要么是以下降状态到达最后一个位置,要么是以上升状态到达最后一个位置

1)f[i]表示以i位置元素为结尾的所有子序列中,最后一个位置呈现上升趋势的最长的摆动序列的长度

2)g[i]表示以i位置元素为结尾的所有子序列中,最后一个位置呈现下降趋势的最长的摆动序列的长度

3)像状态转移方程这类问题也就是子序列问题这样的分析,就是根据子序列的构成来进行分析的,就是来进行分析以i位置元素为结尾的所有子序列是如何来进行构成的

要么是单独自己一个元素来构成子序列,那么这个子序列就是本身,要么就是跟着i元素前面的一个元素后面来充当子序列,长度大于1

class Solution {public int wiggleMaxLength(int[] nums) {int f[]=new int[nums.length];int g[]=new int[nums.length];for(int i=0;i<nums.length;i++){f[i]=1;g[i]=1;}int maxlen=Integer.MIN_VALUE;for(int i=0;i<nums.length;i++){for(int j=0;j<i;j++){if(nums[i]>nums[j]){f[i]=Math.max(f[i],g[j]+1);}if(nums[i]<nums[j]){g[i]=Math.max(g[i],f[j]+1);}}maxlen=Math.max(f[i],maxlen);maxlen=Math.max(g[i],maxlen);}return maxlen;}
}

三)最长递增子序列的个数:

673. 最长递增子序列的个数 - 力扣(LeetCode)

先来一个小算法:要求通过一次遍历。找到数组中最大值出现的次数

1)定义一个maxVal和maxCount,一开始的时候先让maxVal等于数组中的第一个元素,maxCount等于1,然后让i下标向后进行遍历

2)如果发现if(maxVal>array[i])说明array[i]绝对不是当前我们要进行寻找的最大值

如果发现maxVal==array[i]那么让计数器++即可

如果发现maxVal<array[i],此时说明array[i]的值更接近于我们想要的答案,此时前面所做的计数全部白费,此时计数器重置,maxVal=array[i],更新最大值,重新计数

1.定义一个状态标识

dp[i]表示以i位置元素为结尾的所有子序列中,最长的递增子序列的个数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/28867.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

causal-learn ModuleNotFoundError: No module named ‘pygam‘

调用 causallearn 库包&#xff0c;测试CAM-UV算法时报错&#xff1a; No module named pygam 解决方法&#xff1a; pip install pygam 参考链接&#xff1a; 【Python Causal Learning Toolbox】causallearn 库包的使用、报错修改_板砖板砖我是兔子的博客-CSDN博客

linux kernel单独编译某项驱动

linux内核经常涉及编译某一项驱动代码的场景&#xff0c;本次以网卡驱动e1000为例说明整个步骤流程。 首先编译内核驱动不必要编译整个内核&#xff0c;但编译的驱动代码必须要和要安装的内核版本保持一致&#xff0c;否则经常会出现无法加载模块。 在编译驱动前&#xff0c;最…

排序算法第四辑——归并排序与计数排序

目录 一&#xff0c;归并排序算法 二&#xff0c;归并排序的非递归版本 三&#xff0c;计数排序 一&#xff0c;归并排序算法 归并排序算法是一个特别经典的算法了。这个算法采用的思想就是一个分治的思想&#xff0c;也就是将大问题化为子问题的思想。这个思想其实我们经常…

uni-app做h5IOS底部tabbar高度在不同的tabbar页面会忽高忽低

原因不祥&#xff0c;解决办法的话在App.vue中 <style langscss> //每个页面公共css page { height:100vh; } </style>

pytorch+CRNN实现

最近接触了一个仪表盘识别的项目&#xff0c;简单调研以后发现可以用CRNN来做。但是手边缺少仪表盘数据集&#xff0c;就先用ICDAR2013试了一下。 结果遇到了一系列坑。为了不使读者和自己在以后的日子继续遭罪。我把正确的代码发到下面了。 1&#xff09;超参数请不要调整&am…

时序数据库 TDengine 与金山云两大产品完成兼容互认证

万物互联时代&#xff0c;企业数字化转型和政企上云如火如荼。在云计算迎来重大发展机遇的同时&#xff0c;数据库在企业数字化转型中也扮演着重要的角色——随着业务量的激增&#xff0c;数据库的弹性扩容、容灾备份等需求逐渐显现&#xff0c;在此挑战下&#xff0c;时序数据…

Vue项目实现在线预览pdf,并且可以批量打印pdf

最近遇到一个需求,就是要在页面上呈现pdf内容,并且还能用打印机批量打印pdf,最终效果如下: 当用户在列表页面,勾选中两条数据后,点击“打印表单”按钮之后,会跳到如下的预览页面: 预览页面顶部有个吸顶的效果,然后下方就展示出了2个pdf文件对应的内容,我们接着点击“…

Java分布式项目常用技术栈简介

Spring-Cloud-Gateway : 微服务之前架设的网关服务&#xff0c;实现服务注册中的API请求路由&#xff0c;以及控制流速控制和熔断处理都是常用的架构手段&#xff0c;而这些功能Gateway天然支持 运用Spring Boot快速开发框架&#xff0c;构建项目工程&#xff1b;并结合Spring…

热辐射的电磁波传播和相关Fluent设置

热辐射的本质是电磁波的辐射能和物质的内能之间相互转换。电磁波传播过程中&#xff0c;热辐射主要包括以下现象&#xff1a; 反射&#xff08;reflection&#xff09;折射&#xff08;refraction&#xff09;吸收&#xff08;absorption&#xff09;散射&#xff08;scatteri…

前端框架Layui实现动态表格效果用户管理实例(对表格进行CRUD操作-附源码)

目录 一、前言 1.什么是表格 2.表格的使用范围 二、案例实现 1.案例分析 ①根据需求找到文档源码 ②查询结果在实体中没有该属性 2.dao层编写 ①BaseDao工具类 ②UserDao编写 3.Servlet编写 ①R工具类的介绍 ②Useraction编写 4.jsp页面搭建 ①userManage.jsp ②…

使用 uiautomator2+pytest+allure 进行 Android 的 UI 自动化测试

目录 前言&#xff1a; 介绍 pytest uiautomator2 allure 环境搭建 pytest uiautomator2 allure pytest 插件 实例 初始化 driver fixture 机制 数据共享 测试类 参数化 指定顺序 运行指定级别 重试 hook 函数 断言 运行 运行某个文件夹下的用例 运行某…

【极简,亲测,解决】Too many levels of symbolic links

前言&#xff08;与内容无关&#xff09; 帖子看多了&#xff0c;让我产生一种错觉&#xff0c;就是生产这些帖子的人都是机器人吗&#xff1f;是活着的吗&#xff1f;乱七八糟的转载和明显错误的结论太多了。 原因 原因是 链接的层数过多&#xff0c;已经产生了回路。 大概…