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

news2024/10/5 20:26:24

一)最长递增子序列:

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;
    }
}

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Adfind和powerview查询域内特殊的ACL

Adfind 使用adfind查询具备有Dcsync权限的账户 AdFind.exe -s subtree -b "DC=hacktest,DC=com" -sdna nTSecurityDescriptor -sddl+++ -sddlfilter ;;;"Replicating Directory Changes All";; -recmute AdFind.exe -s subtree -b "DC=hacktest,DC…

《Pytorch深度学习和图神经网络(卷 2)》学习笔记——第一章

学习基于如下书籍&#xff0c;仅供自己学习&#xff0c;用来记录回顾&#xff0c;非教程。 <PyTorch深度学习和图神经网络&#xff08;卷2&#xff09;——开发应用>一书配套代码&#xff1a; https://github.com/aianaconda/pytorch-GNN-2nd- 百度网盘链接&#xff1a;…

【有功功率、无功功率】可再生能源配电馈线的鲁棒经济调度研究[IEEE13节点](Matlab代码实现)

&#x1f4a5;1 概述 "有功功率和无功功率" 是与电力系统中能量传输和功率控制相关的两个重要概念。 有功功率&#xff08;Active Power&#xff09;是指电力系统中传输和消耗能量的功率&#xff0c;也被称为实功功率。它负责提供电力系统中的实际电能需求&#xf…

Python使用select模块/asyncio库实现轮询机制

一、轮询机制概念 在操作系统中&#xff0c;用户态轮询机制是一种等待系统中某个资源就绪的方式&#xff0c;它通常用于非阻塞式I/O操作。这种机制允许用户进程在等待I/O操作完成时继续执行其他任务&#xff0c;而不是一直阻塞等待。用户进程可以使用系统调用将I/O操作请求提交…

数学分析:换元详解

这一端文章没有写详细的证明。意思是说n维空间下的k个向量围成的多面体的体积&#xff0c;都可以用公式(3)进行计算。详细证明过程参考&#xff1a;行列式的一种推广 - 知乎 这里简述下过程&#xff1a; 首先要把这n个m维向量进行格拉姆斯密特正交化&#xff0c;得到正交后的…

解决appium-doctor报gst-launch-1.0.exe and/or gst-inspect-1.0.exe cannot be found

一、下载gst-launch-1.0.exe and gst-inspect-1.0.exe 下载地址&#xff1a;Download GStreamer runtime installer 和 development installer 两个应用程序都要下载并安装 二、运行安装 下载好后点击安装会弹出如下界面&#xff0c;点击“更多信息”展开&#xff0c;点击“仍然…

C语言实现计算器简单混合运算

计算器的实现看似简单&#xff0c;其实并不简单。 要求完成功能&#xff1a; 1.实现 - * / 简单运算&#xff1b; 2.可以实现这几个运算符的综合&#xff08;混合&#xff09;运算&#xff1b; 注意&#xff1a;该计算器混合运算中不包含太复杂的运算符&#xff0c;如()&am…

星戈瑞 CY3-Dextran的合成方法和表征

CY3-Dextran是一种荧光染料&#xff0c;可用于细胞标记和显微镜观察。它具有很强的荧光信号和稳定性&#xff0c;可以用于研究细胞生物学和分子生物学。 CY3-Dextran的合成方法涉及将CY3染料与葡聚糖进行共价结合。以下是一种常用的合成方法&#xff1a; 【合成方法】&#xf…

3.1例子---登录窗口1

3.1例子—登录窗口1 这一次效果图是这样的&#xff1a; 界面创建 # welcome image canvas tk.Canvas(window, height200, width500)#创建画布 image_file tk.PhotoImage(filewelcome.gif)#加载图片文件 image canvas.create_image(0,0, anchornw, imageimage_file)#将图…

MySQL数据库第九课--------join连接四件套------不错的哦哦哦

作者前言 欢迎小可爱们前来借鉴我的gtiee秦老大大 (qin-laoda) - Gitee.com ____________________________________________________________________ 目录 SQL查询语句 限定输出 limit 连接查询 join 内连接 左连接 右连接 外连接 ____________________________________…

xxx.indexOf is not a function报错

注意&#xff1a;xxx 如果是数字、布尔、对象&#xff0c;然而indexOf用于查找字符串或数组中的元素&#xff0c;所以会报错。

Qt5.15.2安装

解释一下 Qt 的版本号 比如 5.15.2 是完整的 Qt 版本号&#xff0c;第一个数字 5 是大版本号&#xff08;major&#xff09;&#xff0c;第二个数字 15 是小版本号&#xff08;minor&#xff09;&#xff0c;第三个数字 2 是补丁号&#xff08;patch&#xff09;。 只要前面两个…

Python异步编程框架Tornado使用方法

Tornado简介 Python异步编程框架Tornado是一个轻量级的Web框架和异步网络库&#xff0c;它能够处理大量并发连接和请求&#xff0c;非常适合高并发的网络应用和实时应用。 Tornado基本概念&#xff1a; 协程&#xff1a;Tornado采用协程并发模型&#xff0c;可以让单线程同时…

Vue第三篇:最简单的vue购物车示例

本文参考&#xff1a;Vue Cli&#xff08;脚手架&#xff09;实现购物车小案例 - - php中文网博客 效果图&#xff1a; 编写流程&#xff1a; 1、首先通过vue/cli创建工程 vue create totalprice 2、改写App.vue代码如下&#xff1a; <template><div><div v…

017 - STM32学习笔记 - SPI读写FLASH(二)

016 - STM32学习笔记 - SPI访问Flash&#xff08;二&#xff09; 上节内容学习了通过SPI读取FLASH的JEDEC_ID&#xff0c;在flash资料的指令表中&#xff0c;还看到有很多指令可以使用&#xff0c;这节继续学习使用其他指令&#xff0c;程序模板采用上节的模板。 为了方便起…

uni-app中a标签下载文件跳转后左上角默认返回键无法继续返回

1.首先使用的是onBackPress //跟onShow同级别 onBackPress(option){ uni.switchTab({ url:/pages/....... return true }) }发现其在uni默认头部中使用是可以的 但是h5使用了"navigationStyle":"custom"后手机默认的返回并不可以&#xff0c; 2.经过查询…

autok3s k3d rancher研究

参考 功能介绍 | Rancher文档AutoK3s 是用于简化 K3s 集群管理的轻量级工具&#xff0c;您可以使用 AutoK3s 在任何地方运行 K3s 服务。http://docs.rancher.cn/docs/k3s/autok3s/_index 什么是 AutoK3s k3s是经过完全认证的 Kubernetes 产品&#xff0c;在某些情况下可以替…

Centos 7 使用国内镜像源更新内核

内核选择参考 此博文 &#xff1a;https://blog.csdn.net/alwaysbefine/article/details/108931626 elrepo官网介绍的内核升级方式为&#xff1a; 一、按文档执行引入 elrepo库&#xff1b; # 1、引入公钥 rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org# 2、安…

数据中心水浸事件,该如何找回安全?

数据中心是现代企业和组织中不可或缺的基础设施&#xff0c;承载着大量的敏感数据和关键业务运作。然而&#xff0c;水浸事件可能成为数据中心的巨大威胁&#xff0c;可能导致设备故障、数据丢失以及业务中断&#xff0c;给组织带来严重的损失和风险。 因此&#xff0c;为了保护…

机器学习(十六):决策树

全文共18000余字&#xff0c;预计阅读时间约36~60分钟 | 满满干货&#xff0c;建议收藏&#xff01; 一、介绍 树模型是目前机器学习领域最为重要的模型之一&#xff0c;同时它也是集成学习中最常用的基础分类器。 与线性回归、逻辑回归等算法不同&#xff0c;树模型并不只是…