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

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

动态规划

java 复制代码
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,最长重复子数组长度为dpij。

我就定义dpij为 以下标i为结尾的A,和以下标j 为结尾的B,最长重复子数组长度。不行么?当然可以,就是实现起来麻烦一些。

如果定义 dpij为 以下标i为结尾的A,和以下标j 为结尾的B,那么 第一行和第一列毕竟要进行初始化,如果nums1i 与 nums20 相同的话,对应的 dpi0就要初始为1, 因为此时最长重复子数组为1。 nums2j 与 nums10相同的话,同理。

相关推荐
♡すぎ♡12 分钟前
SWE 的基本条件
算法·swe·浅水模拟
海鸥-w26 分钟前
数据库冗余字段设计笔记
java·数据库·笔记·oracle
工具派36 分钟前
PDF签名贴上去为什么发虚?尺寸、DPI与坐标的边界实测
java·python·pdf
萧瑟余晖1 小时前
Spring Data综合实战与调优详解
java·后端·spring
yuniko-n1 小时前
【JUC】原子类 LongAdder
java
郝学胜-神的一滴2 小时前
AI 编程智能体 17:四步搞定专属AI智能体
大数据·人工智能·python·神经网络·算法·langchain·强化学习
瑞got2 小时前
java使用CountDownLatch做并行查询
java·开发语言
微尘hjx2 小时前
【StrongSort 03】多轨迹算法StrongSort改进点
人工智能·算法·yolo·视觉检测·ultralytics·strongsort·轨迹算法
梦帮科技2 小时前
QML-04-QGraph-Diff:量子非欧图扩散生成模型与 SE(3) 等变分子晶格逆向合成完整技术指南(上部分)
人工智能·算法·自动化·量子计算·傅里叶分析