当前位置: 首页 > news >正文

动态规划-两个数组的dp问题——718.最长重复子数组

1.题目解析

题目来源

718.最长重复子数组——力扣

测试用例 

2.算法原理

1.状态表示

子数组问题不能像子序列问题使用两个区间来表示状态,因为子数组一定是连续的,因此在填第i个位置就需要用到第i-1个位置的值,那么不妨以某个位置为结尾来设置dp表,即

dp[i][j]:以s1的第i个位置为结尾与以s2的第j个位置为结尾的字符串中最长公共子数组的长度

2.状态转移方程

这里需要借助最后位置字符是否相等来判断,相等则找到前一个位置的dp值后对最长公共组数组的长度+1,也就是dp[i-1][j-1]+1,反之不相等则一定不能构成最长公共子数组,直接将该位置dp表的值赋值为0即可

3.初始化

开辟虚拟位置,但是虚拟位置节点为0,于是无需初始化

4.填表顺序

从上到下,每一行从左到右

5.返回值 

返回dp表中的最大值就是最长公共子序列的长度

3.实战代码

代码解析

class Solution {
public:int findLength(vector<int>& nums1, vector<int>& nums2) {int m = nums1.size();int n = nums2.size();int ret = 0;vector<vector<int>> dp(m+1,vector<int>(n+1));for(int i = 1;i <= m;i++){for(int j = 1;j <= n;j++){if(nums1[i-1] == nums2[j-1]){dp[i][j] = dp[i-1][j-1] + 1;}ret = max(dp[i][j],ret);}}    return ret;}
};


http://www.mrgr.cn/news/69785.html

相关文章:

  • npm list @types/node 命令用于列出当前项目中 @types/node 包及其依赖关系
  • 2024版本IDEA创建Sprintboot项目下载依赖缓慢
  • 1小时构建Vue3知识体系之vue的生命周期函数
  • 在 .NET 6.0 中创建用于 CRUD 操作的 Web API
  • linux GPIO
  • FastGPT部署通义千问Qwen和智谱glm模型|OneAPI配置免费的第三方API
  • 【leetcode练习·二叉树】用「分解问题」思维解题 I
  • 《PyTorch深度学习快速入门教程》学习笔记(第20周)
  • 计算机网络基本概念总结
  • cherno引擎课 -
  • 计算机网络-1.2分层结构
  • PostgreSQL 开启密码验证插件
  • 医学图像算法之基于Unet的视网膜血管分割
  • 【Lucene】从文本到索引:Lucene如何构建索引
  • 伊洛瓦底江
  • 存贷款调整 20241110
  • Linux进程信号
  • “穿梭于容器之间:C++ STL迭代器的艺术之旅”
  • 【CLIP系列】开篇
  • GIN:逼近WL-test的GNN架构
  • 信息泄露漏洞一文速通
  • 【Hadoop实训】Hive 数据操作①
  • 全面解析 Python typing模块与静态类型注解:从基础到高级
  • 寻找伤感短视频素材 这些网站帮你轻松下载无水印资源
  • 图片搜索引擎,来快速实现一个高性能的本地图片搜索引擎
  • 《浔川 AI 翻译 v3.0 或面临取消发布困境》