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

LeetCode 718. 最长重复子数组 java题解

https://leetcode.cn/problems/maximum-length-of-repeated-subarray/description/

动态规划

class Solution {public int findLength(int[] nums1, int[] nums2) {int len1=nums1.length,len2=nums2.length;int[][] dp=new int[len1+1][len2+1];dp[0][0]=0;//没有意义,方便后面转移int max=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;}max=Math.max(dp[i][j],max);}}return max;}
}
/*
dp[i][j],代表nums1[i-1],nums2[j-1]为结尾的序列,他们的最大公共序列长度。
dp[i][j]从dp[i-1][j-1]转化而来
如果nums1[i]=nums2[j],说明本数字相等,那么前面的结果可以+1
*/

dp数组为什么定义:以下标i - 1为结尾的A,和以下标j - 1为结尾的B,最长重复子数组长度为dp[i][j]。
我就定义dp[i][j]为 以下标i为结尾的A,和以下标j 为结尾的B,最长重复子数组长度。不行么?当然可以,就是实现起来麻烦一些。
如果定义 dp[i][j]为 以下标i为结尾的A,和以下标j 为结尾的B,那么 第一行和第一列毕竟要进行初始化,如果nums1[i] 与 nums2[0] 相同的话,对应的 dp[i][0]就要初始为1, 因为此时最长重复子数组为1。 nums2[j] 与 nums1[0]相同的话,同理。

http://www.lryc.cn/news/503337.html

相关文章:

  • 算法知识-15-深搜
  • 区块链dapp 开发详解(VUE3.0)
  • Plugin [id: ‘flutter‘] was not found in any of the following sources解决方法
  • 专升本-高数 1
  • 【考前预习】3.计算机网络—数据链路层
  • DockeUI 弱口令登录漏洞+未授权信息泄露
  • 【电子元器件】电感基础知识
  • 【SSH+X11】VsCode使用Remote-SSH在远程服务器的docker中打开Rviz
  • Vue Web开发(五)
  • HarmonyOS:使用Grid构建网格
  • 开源Java快速自测工具,可以调用系统内任意一个方法
  • 力扣刷题TOP101: 29.BM36 判断是不是平衡二叉树
  • 【在Linux世界中追寻伟大的One Piece】自旋锁
  • 前端编辑器JSON HTML等,vue2-ace-editor,vue3-ace-editor
  • C++ 中的运算符重载
  • 渗透测试工具 -- SQLmap安装教程及使用
  • 使用 Database Tools 实现高效数据查询的十大 IntelliJ IDEA 快捷键
  • SpringBoot 整合 RabbitMQ 实现流量消峰
  • 大数据挖掘建模平台案例分享
  • MySQL数据表的管理
  • SpringBoot【十三(实战篇)】集成在线接口文档Swagger2
  • 【C++初阶】第8课—标准模板库STL(string_2)
  • 【arm】程序跑飞,SWD端口不可用修复(N32G435CBL7)
  • https证书生成、linux 生成https证书、nginx 配置https证书
  • Halcon随机贴图生成缺陷图片脚本
  • [ZMQ] -- ZMQ通信Protobuf数据结构 1
  • 大数据平台
  • 《C++解锁机器学习特征工程:构建智能数据基石》
  • 《机器学习》3.7-4.3end if 启发式 uci数据集klda方法——非线性可分的分类器
  • 【Linux】VMware 安装 Ubuntu18.04.2