动态规划 Leetcode 718 最长重复子数组

2024-04-02 19:36

本文主要是介绍动态规划 Leetcode 718 最长重复子数组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最长重复子数组

Leetcode 718

学习记录自代码随想录

要点:1.想到dp数组二维表达的含义;
2.想到正确初始化dp数组, f o r ( i n t i = 0 ; i < m ; i + + ) i f ( n u m s 1 [ i ] = = n u m s 2 [ 0 ] ) d p [ i ] [ 0 ] = 1 f o r ( i n t j = 0 ; j < n ; j + + ) i f ( n u m s 2 [ j ] = = n u m s 1 [ 0 ] ) d p [ 0 ] [ j ] = 1 for(int i = 0; i < m; i++) if(nums1[i] == nums2[0]) dp[i][0] = 1 \\ for(int j = 0; j < n; j++) if(nums2[j] == nums1[0]) dp[0][j] = 1 for(inti=0;i<m;i++)if(nums1[i]==nums2[0])dp[i][0]=1for(intj=0;j<n;j++)if(nums2[j]==nums1[0])dp[0][j]=1
3.两层遍历都要从0开始;

class Solution {
public:int findLength(vector<int>& nums1, vector<int>& nums2) {int m = nums1.size();int n = nums2.size();// 1.定义dp数组dp[i][j]含义为以nums1[i]结尾和nums2[j]结尾时最大公共数组的长度vector<vector<int>> dp(m, vector<int>(n, 0));// 2.递推公式 if(nums1[i] == nums2[j]) dp[i][j] = dp[i-1][j-1] + 1;// 3.初始化dp数组for(int i = 0; i < m; i++) if(nums1[i] == nums2[0]) dp[i][0] = 1;for(int j = 0; j < n; j++) if(nums2[j] == nums1[0]) dp[0][j] = 1;// 4.遍历顺序,两层遍历,正向遍历int result = 0;// 需要从0开始遍历,有可能会出现一个数组首个元素和另一个数组中间某个元素相等的情况for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){if(nums1[i] == nums2[j] && i > 0 && j > 0) dp[i][j] = dp[i-1][j-1] + 1;if(dp[i][j] > result) result = dp[i][j];}}// 5.举例推导dp数组return result;}
};

这篇关于动态规划 Leetcode 718 最长重复子数组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/870866

相关文章

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S