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

LeetCode718:最长重复子数组

题目链接:718. 最长重复子数组 - 力扣(LeetCode)

代码如下

class Solution {
public:int findLength(vector<int>& nums1, vector<int>& nums2) {//dp[i][j]是以i-1为结尾和j-1为结尾的最长重复子数组//dp[i][j] = dp[i - 1][j - 1] + 1递推公式;int len1 = nums1.size();int len2 = nums2.size();if(len1 == 0 || len2 == 0)   return 0;int result = 0;vector<vector<int> > dp(len1 + 1, vector<int>(len2 + 1, 0));for(int i = 1; i <= len1; i++){for(int j = 1; j <= len2; j++){if(nums1[i - 1] == nums2[j - 1]){dp[i][j] = dp[i - 1][j - 1] + 1;}if(dp[i][j] > result)   result = dp[i][j];}}return result;}
};

确定dp数组含义:

这个dp的含义就是dp[i][j]是以i-1为结尾和j-1为结尾的最长重复子数组,为什么这个定义呢,是因为我们需要从后往前去寻找一个最大的重复的,这个其实和初始化也有一定关系,如果定义了i和j的话,那么初始化,就不能初始化为0了,这个时候你定义的dp递推公式就已经达不到最大的效果了

dp数组的递推公式:

if(nums1[i - 1] == nums2[j - 1])
{
         dp[i][j] = dp[i - 1][j - 1] + 1;
}

这个其实也很好理解,我们需要寻找重复的嘛,也就是去把两个数组往前走,然后加1。

初始化:

刚才上面也讲到了,如果dp的含义是i和j的话,那么我们初始化就要在多些两层for循环,然后去定义好dp[0][j]和dp[i][0]这一列和一行的初始化,如果我们含义是i - 1和j - 1的话,那么我们就可以初始化为0就好。这样就能最大的发挥dp递推公式

返回值:

这个也需要我们定义一个result就好,然后在for循环里面去用dp[i][j]去和result比较就好。


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

相关文章:

  • ros2 action server示例、拓展、练习
  • 2024 四川省大学生信息安全技术大赛 安恒杯 部分 WP
  • 重新构建带python的boost库,但是cmake报错找不到 boost_nump
  • 第十八课:Python学习之多态
  • 《中国结算全国股份转让系统—结算参与人数据接口规范》
  • vue 页面导出gif图片 img 导出gif 超简单~
  • [DB] NSM
  • 在线教育(培训+考试)/企业培训-企业培训平台-企业培训平台系统-企业内部培训系统-在线教育-Java语言开发
  • 「AIGC」n8n AI Agent开源的工作流自动化工具
  • php基础:数据类型、常量、字符串
  • 【内信互联】私有化安全性企业远程运维办公解决方案
  • Redis-04 Redis管道
  • 《黑神话:悟空》:又是这只跨界的猴子,诠释了传承与创新的关系
  • 【1】从零开始学习目标检测:YOLO算法详解
  • 1024程序员节:永无bug
  • 《远程桌面方案全析:开启高效远程协作新时代》
  • 美容师流失率高怎么办?怎样可以降低美容师的流失率?博弈美业门店收银系统管理系统分享
  • [LeetCode] 50. Pow(x, n)
  • 基于STM32的多功能MP3播放器
  • 数字信号处理实验简介
  • 流程引擎在企业管理中的关键作用
  • 双十一开启极速达夜派;黑神话获泰国年度最佳游戏;AI 模型可帮助识别 17000 多种疾病的候选药物....| 网易数智日报
  • 配置nginx服务通过ip访问多网站
  • 前端开发-HTML
  • 微博评论获取和数据分析(源码)
  • uniapp学习(007-1 壁纸项目:页面框架搭建)