刷题之动态规划-子序列

前言

大家好,我是jiantaoyab,开始刷动态规划的子序列类型相关的题目,子序列元素的相对位置和原序列的相对位置是一样的

动态规划5个步骤

  1. 状态表示 :dp数组中每一个下标对应值的含义是什么>dp[i]表示什么
  2. 状态转移方程: dp[i] 等于什么
  3. 1 和 2 是动态规划的核心步骤,第三步是初始化,保证填表的时候不越界
  4. 填表顺序:为了保证填写当前状态的时候,所需要的状态已经计算过
  5. 返回值

最长递增子序列

image-20240403095425098

题目分析

image-20240403105502701

代码

class Solution {
public:int lengthOfLIS(vector<int>& nums) {int n = nums.size();vector<int> dp(n, 1);int ret = 1;for(int i = 1; i < n; i++){for(int k = 0; k < i; k++){if(nums[k] < nums[i])dp[i] = max(dp[k] + 1, dp[i]);}ret = max(ret, dp[i]);}return ret;}
};

摆动序列

image-20240404090127835

代码

class Solution {
public:int wiggleMaxLength(vector<int>& nums) {int n = nums.size();vector<int> f(n, 1); vector<int> g(n, 1);int ret = 1;for(int i = 1; i < n; i++){for(int j = 0; j < i; j++){if(nums[j] < nums[i])//递增f[i] = max(f[i],  g[j] + 1); else if(nums[j] > nums[i])//递减 g[i] = max(g[i],  f[j] + 1);}   ret = max(f[i], g[i]);}return ret ;}
};

最长递增子序列的个数

image-20240404094248815

题目分析

image-20240404102615870

代码

class Solution {
public:int findNumberOfLIS(vector<int>& nums) {int n = nums.size();vector<int> len(n, 1);vector<int> count(n, 1);int ret_len = 1, ret_count = 1;for(int i = 1; i < n; i++){for(int k = 0; k < i; k++){if(nums[k] < nums[i]) {if(len[k] + 1 == len[i]) count[i] += count[k];else if(len[k] + 1 > len[i]){len[i] = len[k] + 1 ; count[i] = count[k];}}                 }//更新返回值if(ret_len == len[i]) ret_count += count[i];else if(ret_len < len[i]) ret_len = len[i], ret_count = count[i];}return  ret_count;}
};

最长数对链

image-20240404103433761

题目分析

dp[i]: 表示以i位置为结尾的最长数对链的长度

在(0,i-1)中取一个j,是数对链的话得满足pairs[j] [1] < pairs[i] [0]

代码

class Solution {
public:int findLongestChain(vector<vector<int>>& pairs) {int m = pairs.size();vector<int> dp (m, 1);sort(pairs.begin(), pairs.end());int ret = 1;for(int i = 1; i < m; i++){for(int j = 0; j < i; j++){if(pairs[j][1] < pairs[i][0])dp[i] = max(dp[j] + 1, dp[i]);}ret = max(ret, dp[i]);}return ret;}
};

最长定差子序列

image-20240405082954751

题目分析

image-20240405090140474

代码

class Solution {
public:int longestSubsequence(vector<int>& arr, int difference) {int n  = arr.size();unordered_map<int, int> hash; //<arr[i], dp[i]>int ret = 1;//初始化hash[arr[0]] = 1;for(int i = 1; i < n; i++){hash[arr[i]] = hash[arr[i] - difference] + 1;ret = max(ret, hash[arr[i]]);}return ret;}
};

最长的斐波那契子序列的长度

image-20240406175144571

题目分析

image-20240406185244342

代码

class Solution {
public:int lenLongestFibSubseq(vector<int>& arr) {int n = arr.size();vector<vector<int>> dp(n, vector<int>(n, 2));unordered_map<int, int> hash;//将arr中的值和下标绑定起来for(int i = 0; i < n; i++) hash[arr[i]] = i;int ret = 2;for(int j = 2; j < n; j++) //固定最后一个位置{for(int i = 1; i < j; i++) //固定倒数第二个位置{int x = arr[j] - arr[i];if(hash.count(x) && x < arr[i]) {dp[i][j] = dp[hash[x]] [i]+ 1;ret = max(ret, dp[i][j]);}}}return ret < 3 ?  0  : ret;}
};

最长等差数列

image-20240407082524850

题目分析

image-20240407091840789

代码

class Solution {
public:int longestArithSeqLength(vector<int>& nums) {int n = nums.size();unordered_map<int, int> hash; //放nums元素对应的下标hash[nums[0]] = 0;int ret = 2;vector<vector<int>> dp(n,  vector<int>(n, 2));for(int i = 1; i < n; i++) //固定倒数第2个数{for(int j = i + 1; j < n; j++) //依次枚举倒数第一个数{int x = 2 * nums[i]  - nums[j];if(hash.count(x)) dp[i][j] = dp[hash[x]][i] + 1;ret = max(ret,  dp[i][j]);}hash[nums[i]] = i;}return ret;}
};

等差数列划分 II - 子序列

image-20240407092146451

题目分析

image-20240407100137814

代码

class Solution {
public:int numberOfArithmeticSlices(vector<int>& nums) {int n = nums.size();unordered_map<long long, vector<int>> hash; //存放nums元素对应的下标for(int i = 0; i < n; i++) hash[nums[i]].push_back(i); //每个元素的下标可能有多个vector<vector<int>> dp(n, vector<int>(n));int ret = 0;for(int j = 2; j < n; j++) //固定最后一个位置{for(int i = 1; i < j; i++) //依次遍历倒数第二个位置{long long x = (long long)2 * nums[i] - nums[j];if(hash.count(x)) {//提取出nums[i]的下标for(auto k : hash[x]){if(k < i) dp[i][j] += dp[k][i] + 1;}}ret += dp[i][j];}}return ret;}
};

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

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

相关文章

RuoYi-Cloud下载与运行

一、源码下载 若依官网:RuoYi 若依官方网站 鼠标放到"源码地址"上,点击"RuoYi-Cloud 微服务版"。 跳转至Gitee页面,点击"克隆/下载",复制HTTPS链接即可。 源码地址为:https://gitee.com/y_project/RuoYi-Cloud.git 点击复制 打开IDEA,选…

千万不要错过这6款能让你快速写作成长的宝藏软件…… #学习方法#AI写作

国外ChatGPT爆火&#xff0c;AI写作在国内也引起不小的瞩目&#xff0c;目前国内的AI写作工具少说也有几十上百个&#xff0c;要在这么多AI写作中找出适合自己的工具&#xff0c;一个一个尝试是不太现实的&#xff0c;所以今天就给大家推荐一些款AI写作工具。帮助你少走弯路&am…

开源AI程序员SWE-Agent的实现方法

1 引子 前几天&#xff0c;AI 编程机器人 Devin 引起了热议。传言称&#xff1a;程序员的饭碗就要丢了。这两天&#xff0c;一个类似功能的产品 SWE-Agent 开源&#xff0c;在 SWE-Bench 上实现了与 Devin 类似的效果。下面让我们来看看 AI 程序员的具体实现方法。 2 信息 地…

抖音电商罗盘品牌人群运营策略指南

【干货资料持续更新&#xff0c;以防走丢】 抖音电商罗盘品牌人群运营策略指南 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 抖音运营资料合集&#xff08;完整资料包含以下内容&#xff09; 目录 品牌人群运营策略&#xff0c;旨在帮助品牌通过精细化运营提…

深度学习笔记【订阅前必读】

一、同款pdf版本笔记使用情况 pytorch深度学习&#xff08;共计169页&#xff0c;基于本人听完B站小土堆PyTorch深度学习快速入门教程所写&#xff09; 发现这一份B站小土堆Pytorch深度学习笔记连985、211等高校同学都在使用(语雀在线版&#xff0c;笔记带评论) 二、笔记获取优…

vscode连接远程服务器一直需要输密码,但是连不上

问题&#xff1a;vscode连接远程服务器一直需要输密码&#xff0c;但是连不上。 解决办法&#xff1a;kill 掉该远程服务器&#xff0c;然后再重新连接 操作&#xff1a; windows: ctrlshiftp mac:cmdshiftp 调出指令&#xff0c;然后选择“Remote SSH:Kill Vscode Serve…

【代码随想录】day37:递增数字,监控二叉树

递增数字 def monotoneIncreasingDigits(self, n):""":type n: int:rtype: int"""# 找到不递增的位置i对应的数字k&#xff0c;前一个数字-1,后面都变为9&#xff0c;# 后序遍历nlist(str(n))for i in range(len(n)-1,0,-1):# 如果不递增if n[i]…

SpringMVC--概述 / 入门

目录 1. SpringMVC简介 2. 配置&入门 2.1. 开发环境 2.2. 创建maven工程 2.3. 手动创建 web.xml 2.4. 配置web.xml 2.4.1. 默认配置方式 2.4.2. 扩展配置方式 2.5. 创建请求控制器 2.6. 创建springMVC的配置文件 2.7. 测试 HelloWorld 2.7.1. 实现对首页的访问…

基于java+springboot+vue实现的教学辅助系统(文末源码+Lw)23-225

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差&#…

健康元 穿越周期看底色

中国创新药正在迈进2.0时代。 进入2024年之后&#xff0c;越来越多的国内创新药企开始主动调整研发管线&#xff0c;缩减研发开支&#xff0c;甚至是直接被“溢出”了市场。 在“风向标”的融资端&#xff0c;过去的2023年也是中国创新药融资市场连续第二年出现一二级市场融资…

逆向入门:为CTF国赛而战day03

今天来做几道题目。 环境准备&#xff1a;ida ,Exeinfo,万能脱壳器&#xff08;后面有写资源&#xff09; 强推&#xff0c;亲测有效CTF小工具下载整理_ctf工具御剑下载-CSDN博客 [网站BUUCTF] 目录 题目一 题目二三 题目4&#xff1a;新年快乐 题目一 easyre题解_easyr…

电脑硬件 - 硬盘

硬盘是一台电脑的数据中心&#xff0c;存放着我们用户的所有文件和数据 对于一块硬盘&#xff0c;其重要指标&#xff1a;顺序读写能力&#xff0c;随机读写能力 顺序读写影响大文件的拷贝&#xff0c;随机读写影响大量小文件的拷贝&#xff08;打开软件的快慢&#xff09; 因…

【算法详解】双指针

双指针 常见的双指针有两种形式&#xff0c;一种是对撞指针&#xff0c;一种是左右指针。 1. 双指针简介 双指针&#xff08;Two Pointers&#xff09;&#xff1a;指的是在遍历元素的过程中&#xff0c;不是使用单个指针进行访问&#xff0c;而是使用两个指针进行访问&#…

chrome google浏览器添加插件扩展失败怎么办,无法从该网站添加应用、扩展程序和用户脚本确定,

无法从该网站添加应用、扩展程序和用户脚本确定 chrome google浏览器添加插件扩展失败怎么办&#xff0c;无法从该网站添加应用、扩展程序和用户脚本确定&#xff0c; 需要打开调试模式 chrome://extensions/

第32篇:实时时钟

Q&#xff1a;本期我们使用BCD计数器设计实现分--秒--厘秒实时时钟。 A&#xff1a;实时时钟设计&#xff1a;在2个七段数码管上显示分钟&#xff08;从0到59&#xff09;&#xff0c;在2个七段数码管显示秒&#xff08;从0到59&#xff09;&#xff0c;在2个七段数码管上显示…

信息工程大学第五届超越杯程序设计竞赛(同步赛)vp

目录 A.遗失的旋律 C.财政大臣 D.实验室有多少人 E.在雾中寻宁静 F.不规则的轮回 G.完美数字 M.Monikas game A.遗失的旋律 思路&#xff1a;模拟即可 代码如下&#xff1a; #include<bits/stdc.h>using namespace std; #define fs first #define sc second #de…

目标检测——RCNN系列学习(一)

前置知识 包括&#xff1a;非极大值抑制&#xff08;NMS&#xff09;、selective search等 RCNN [1311.2524] Rich feature hierarchies for accurate object detection and semantic segmentation (arxiv.org)https://arxiv.org/abs/1311.2524 1.网络训练 2.推理流程 3.总…

Vant使用自定义图标(阿里图标)

前言 阿里图标官网 备用地址&#xff1a; https://www.iconfont.cn/ 添加图标 1、进入官网添加图标&#xff0c;如箭头所示 2、复制如图选中的文件&#xff0c;粘贴项目中的src/assets/icon_font/目录下 3、在main.js引入图标css //引入自定义图标 import /assets/icon_fon…

基于springboot教师人事档案管理系统,2024年最新基于web的毕业设计题目代码

管理员 教师端 目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 研究现状 2 1.3 研究意义 3 第2章 相关技术 4 2.1 系统开发平台 5 2.2 平台开发相关技术 6 第3章 系统分析 7 3.1 系统目标 8 3.2系统流程和逻辑 9 第4章系统概要设计 10 4…

Linux虚拟主机中如何进行扫描检查恶意软件

看到论坛中有网友留言想要知道Linux虚拟主机上是否有扫描检测工具可以检测病毒文件或者恶意软件的。因为想要知道是否有此功能&#xff0c;以便他后去购买产品是可以更清晰的去咨询以及了解。正如这边是有使用Hostease提供商的Linux 虚拟主机&#xff0c;而cPanel中如何进行扫描…