为什么80%的码农都做不了架构师?>>>   

问题:

Given two integer arrays A and B, return the maximum length of an subarray that appears in both arrays.

Example 1:

Input:
A: [1,2,3,2,1]
B: [3,2,1,4,7]
Output: 3
Explanation:
The repeated subarray with maximum length is [3, 2, 1].

Note:

  1. 1 <= len(A), len(B) <= 1000
  2. 0 <= A[i], B[i] < 100

解决:

①  给定两个数组A和B,返回两个数组的最长重复子数组。

dp[i][j]表示数组A的前i个数字和数组B的前j个数字的最长重复子数组的长度,如果dp[i][j]不为0,则A中第i个数组和B中第j个数字必须相等。

以[1,2,2]和[3,1,2]为例,dp数组为:

3 1 2
1 0 1 0
2 0 0 2
2 0 0 1

当A[i] == B[j]时,dp[i][j] = dp[i - 1][j - 1] + 1;

当A[i] != B[j]时,dp[i][j] = 0;

每次算出一个dp值,都要用来更新结果res,这样就能得到最长相同子数组的长度了。

class Solution { //83ms
    public int findLength(int[] A, int[] B) {
        int res = 0;
        int[][] dp = new int[A.length + 1][B.length + 1];
        for (int i = 1;i < dp.length;i ++){
            for (int j = 1;j < dp[i].length;j ++){
                dp[i][j] = (A[i - 1] == B[j - 1]) ? dp[i - 1][j - 1] + 1 : 0;
                res = Math.max(res,dp[i][j]);
            }
        }
        return res;
    }
}

② 简化为一维数组。

class Solution { //41ms
    public int findLength(int[] A, int[] B) {
        int res = 0;
        int[] dp = new int[B.length + 1];
        for (int i = 1;i <= A.length;i ++){
            for (int j = B.length;j > 0;j --){
                if (A[i - 1] == B[j - 1]){
                    dp[j] = dp[j - 1] + 1;
                    res = Math.max(res,dp[j]);
                }else {
                    dp[j] = 0;
                }
            }
        }
        return res;
    }
}

转载于:https://my.oschina.net/liyurong/blog/1608199

求两个数组的最长重复子数组 Maximum Length of Repeated Subarray相关推荐

  1. 718. Maximum Length of Repeated Subarray 最长重复子数组

    Title 给两个整数数组 A 和 B ,返回两个数组中公共的.长度最长的子数组的长度. 示例 1: 输入: A: [1,2,3,2,1] B: [3,2,1,4,7] 输出: 3 **解释: ** ...

  2. leetcode 718. Maximum Length of Repeated Subarray | 718. 最长重复子数组(动态规划)

    题目 https://leetcode.com/problems/maximum-length-of-repeated-subarray/ 题解 Dynamic Programming [Accept ...

  3. leetcode718. 最长重复子数组

    一:题目 二:上码 class Solution {public:/**思路:1.分析题意:1 2 3 6 7 41 2 6 7 4 3这里我们先遇到的1 2 但后来我们又遇见了6 7 4 那么我们的 ...

  4. LeetCode 718最长重复子数组

    题目链接:力扣                                                子序列默认不连续,子数组默认连续 思路: 动态规划: 定义dp数组:         dp ...

  5. 两个数组进行比较_LeetCode 718. 最长重复子数组 | Python

    718. 最长重复子数组 题目来源:力扣(LeetCode)https://leetcode-cn.com/problems/maximum-length-of-repeated-subarray 题 ...

  6. 最长重复子数组最长公共子序列不相交的线

    引言 这同样是两种类型的题目,有很多相似的地方和不同的地方,区别依然是连续和不连续之分. 最长重复子数组 给两个整数数组 A 和 B ,返回两个数组中公共的.长度最长的子数组的长度. 示例: 输入: ...

  7. leetcode(力扣) 718. 最长重复子数组 1143. 最长公共子序列 1035. 不相交的线 (动态规划)

    文章目录 718. 最长重复子数组 题目描述 思路分析 完整代码 1143. 最长公共子序列 1035. 不相交的线: 这三道题思路基本一样,尤其是最后两道,代码都一样,一点不需要改的,所以放一起把. ...

  8. Java实现 LeetCode 718 最长重复子数组(动态规划)

    718. 最长重复子数组 给两个整数数组 A 和 B ,返回两个数组中公共的.长度最长的子数组的长度. 示例 1: 输入: A: [1,2,3,2,1] B: [3,2,1,4,7] 输出: 3 解释 ...

  9. 力扣-718最长重复子数组(dp)

    力扣-718最长重复子数组 1.题目 给两个整数数组 nums1 和 nums2 ,返回 两个数组中 公共的 .长度最长的子数组的长度 . 示例 1: 输入:nums1 = [1,2,3,2,1], ...

最新文章

  1. 【廖雪峰python入门笔记】切片
  2. 打印格式设置(SPAD)
  3. Verilog | HDL 音乐流水灯(代码类)
  4. ShaderLab学习小结(一)最简化的顶点片断Shader
  5. 彭文华:详解数字化转型的破局之道(附直播视频)
  6. 公安网络安全部门封杀的2000家淘宝钓鱼网站
  7. Golang slice 的底层实现
  8. 鸿蒙系统手机现在有什么,华为鸿蒙手机迟迟未来 手机操作系统面临的难点有哪些...
  9. 6.边缘检测:梯度——边缘检测、导数与边缘、什么是梯度_2
  10. uwp post php,window_Win10开发系列专题五 UWP应用添加画布及语音输入支持,这是微软Win10十个开发系列专 - phpStudy...
  11. qt-rcc提示找不到资源文件
  12. spring data redis的使用jar包版本冲突问题
  13. win10专业版没有触摸板选项_win10鼠标光标不见了触摸板没反应
  14. ipv6电视直播Android,关于高校电视直播(ipv4ipv6)
  15. shell脚本语法教程
  16. 中职计算机教学工作随笔,教师随笔日记(精选6篇)
  17. 恒生电子 招聘FPGA开发/验证工程师
  18. 无向图的极大团、最大团(Bron-Kerbosch算法)
  19. mac命令行压缩解压rar文件
  20. NNDL 2022秋

热门文章

  1. 在下列选项中,没有构成死循环的程序的是?
  2. STM32的IIC应用详解3
  3. 《深入理解计算机系统》读书笔记九:寄存器结构
  4. spring31-1: 事务-传播行为
  5. ORACLE TNS(transparence Network Substrate透明网络底层)
  6. 云计算开发技术,Python自动化运维开发实战三部分
  7. 一个查看UI5控件所有公有方法的小技巧
  8. ceph-deploy出错UnableToResolveError Unable to resolve host
  9. weblogic负载分发
  10. JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版下载