代码随想录 718. 最长重复子数组

题目
给两个整数数组 nums1 和 nums2 ,返回 两个数组中 公共的 、长度最长的子数组的长度 。
示例 1:
输入:nums1 = [1,2,3,2,1], nums2 = [3,2,1,4,7]
输出:3
解释:长度最长的公共子数组是 [3,2,1] 。
示例 2:
输入:nums1 = [0,0,0,0,0], nums2 = [0,0,0,0,0]
输出:5

解题思路
重复子数组即要求是连续的,以nums1 = [1,2,3,2,1], nums2 = [3,2,1,4,7]为例,可以由下表得到最长的子数组的长度为3. 本题的解法很多,本文给出动态规划解法。定义dp[i][j]截止数组num1的第i个元素和num2的第j个元素所能包含的最长子数组的最大长度。如果遍历到了num1[i-1]等于num2[j-1],则dp[i][j]可由dp[j-1][j-1]+1得到。最后返回dp[i][j]的最大值。
在这里插入图片描述
本题值得注意的是使用了dp[i-1][j-1],则i和j都需要从1开始遍历。且设置for循环时需要遍历到nums1.size()(即i<nums1.size()+1),是因为需要比较num1和num2到最后一个元素。对应的dp(nums1.size()+1, vector(nums2.size()+1,0)), 比num1和num2的长度多一个。

代码实现

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

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

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

相关文章

C++ 类和对象 (下)

初始化列表&#xff1a; 之前所说的构造函数初始化严格意义上来说不能叫变量初始化&#xff0c;只能是称为赋初值&#xff0c;C给出了初始化列表的概念 标准写法&#xff1a; class Date { public:Date (int year ,int month, int day):_year(year),_month(month),_day(day)…

C++——stack的基本概念与常用接口

1.stack基本概念 概念:stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口 图形剖析: ____________________________栈底 | | 数据元素 | || |________________________| || | 数据元素 | || |________________________| || | 数据元…

如何用离散二维卷积公式描述卷积过程(说实话,我没搞懂为什么索引为什么设置成对称的模式。)

问题描述&#xff1a;如何用离散二维卷积公式描述卷积过程&#xff08;说实话&#xff0c;我没搞懂为什么索引为什么设置成对称的模式。&#xff09; 众所周知&#xff0c;描述图像卷积过程&#xff0c;可以使用图形法描述&#xff0c;也可以用公式法描述&#xff0c;但是具体用…

ubuntu vi 方向键乱码问题解决方案

方向键乱码问题解决方案 这个其实很简单 只需要在终端输入apt-get install vim 待安装完成就可以了

第十课:计算机心理学、教育科技及奇点,天网,计算机的未来

第十课&#xff1a;计算机心理学、教育科技及奇点&#xff0c;天网&#xff0c;计算机的未来 第三十八章&#xff1a;计算机心理学0、计算机中用到的心理学原理1、易用度2、颜色强度排序和颜色排序3、分组更好记4、直观功能5、认出VS回想6、让机器有一定的情商以及Facebook的研…

新兴电商平台都有哪些?新手做哪个比较盈利?

我是电商珠珠 近年来的电商平台层出不穷&#xff0c;由于购物方式发生了改变&#xff0c;传统的电商模式已经不能满足当前人们的需求&#xff0c;所以在抖音推出电商-抖音小店后&#xff0c;让整个电商圈发生了全新的改变。 抖音小店的出现顺势将直播电商带了起来&#xff0c…

计算机研究生论文检索方法汇总

计算机研究生论文检索方法汇总 作为一名优质(冤种)计算机在读研究生&#xff0c;检索论文是一项不可或缺的技能之一。 一、paperwithcode paperswithcode是一个免费开放的资源平台&#xff0c;提供了机器学习领域的论文、代码、数据集、方法和评估表。在这里我们可以检索不同…

Python|使用Missingno库可视化缺失值(NaN)

在真实世界数据集的情况下&#xff0c;数据集中的某些值丢失是非常常见的。我们将这些缺失值表示为NaN&#xff08;非数字&#xff09;值。但是要构建一个好的机器学习模型&#xff0c;我们的数据集应该是完整的。这就是为什么我们使用一些插补技术来用一些可能的值替换NaN值。…

C语言多线程编程-线程同步

介绍 多线程编程&#xff0c;经常会遇到线程直接数据同步&#xff0c;为了保证数据访问安全&#xff0c;就必须考虑线程之间的同步问题。在C语言中&#xff0c;多线程编程的线程同步主要依赖于POSIX线程&#xff08;Pthreads&#xff09;库提供的同步原语。以下是一些关键的线…

DevOps(6)

目录 26.如何在Linux下跨不同的虚拟桌面共享程序&#xff1f; 27.无名&#xff08;空&#xff09;目录代表什么&#xff1f; 29.什么是守护进程&#xff1f; 30.如何从一个桌面环境切换到另一个桌面环境&#xff0c;例如从KDE切换到Gnome? 26.如何在Linux下跨不同的虚拟桌面…

你的网站或许不需要前端构建(二)

前一阵&#xff0c;有朋友问我&#xff0c;能否在不进行前端编译构建的情况下&#xff0c;用现代语法开发网站界面。 于是&#xff0c;就有了这篇文章中提到的方案。 写在前面 这篇文章&#xff0c;依旧不想讨论构建或不构建&#xff0c;哪一种方案对开发更友好&#xff0c;…

JavaScript实现大整数加法

实现大整数加法 即两个数字字符相加&#xff0c;采用按位加法实现 方法 const add (a, b) > {let i a.length - 1;let j b.length - 1;let carry 0;let ret "";while (i > 0 || j > 0) {let x 0;let y 0;let sum "";if (i > 0) {x …

《工具录》NetCat

工具录 1&#xff1a;NetCat2&#xff1a;选项介绍3&#xff1a;示例3.1&#xff1a;正向连接&#xff08;被动连接&#xff09;3.2&#xff1a;反向连接&#xff08;主动连接&#xff09;3.3&#xff1a;信息收集3.4&#xff1a;文件传输 4&#xff1a;其他 本文以 kali-linux…

MySQL——视图

目录 一.视图介绍 二.基本使用 三.视图规则和限制 一.视图介绍 视图是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表&#xff0c;基表的数据变化也会影响到视图。 二.基本使用 创…

在 list 中根据项目需求,使用不同的方法进行查找及删除

学习目标&#xff1a; 学习目标 在 list 中根据项目需求&#xff0c;使用不同的方法进行查找及删除 学习内容&#xff1a; 内容 在 list 中根据项目需求&#xff0c;使用不同的方法进行查找在 list 中根据项目需求&#xff0c;使用不同的方法进行删除 知识总结&#xff1a; …

【mysql django】解决Django提示mysql版本过低

目录 一、解决Django提示mysql版本过低&#xff1a;django.db.utils.NotSupportedError: MySQL 8 or later is required (found 5.7.26) 一、解决Django提示mysql版本过低&#xff1a;django.db.utils.NotSupportedError: MySQL 8 or later is required (found 5.7.26) 报错&…

Netty初探:掌握高性能网络通信框架,提升Java网络编程技能

Netty初探 NIO 的类库和 API 繁杂 &#xff0c; 使用麻烦&#xff1a; 需要熟练掌握Selector、 ServerSocketChannel、SocketChannel、 ByteBuffer等。 开发工作量和难度都非常大&#xff1a; 例如客户端面临断线重连、 网络闪断、心跳处理、半包读写、 网络拥塞和异常流的处…

左旋字符串与判断字符串左旋编程题

字符串左旋 实现一个函数&#xff0c;可以左旋字符串中的k个字符。 例如&#xff1a; ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 方法一 void left_move(char* arr, int k) {int i 0;size_t len strlen(arr);k k % len;for (i 0; i < k; i){//左旋转一个…

30 C++ 类型转换构造函数 和 类型转换函数 operator type(类对象)

类型转换构造函数 定义 //类型转换构造函数&#xff1a; //只有一个参数的构造函数&#xff0c; //且参数不是自己的const 引用的构造函数&#xff0c;也称之为 &#xff1a;类型转换构造函数。 //类型转换构造函数&#xff1a; //只有一个参数的构造函数&#xff0c; //且参数…