0
点赞
收藏
分享

微信扫一扫

Leetcode--Java--718. 最长重复子数组

Java架构领域 2022-02-05 阅读 86
动态规划

题目描述

给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。

样例描述

输入:
A: [1,2,3,2,1]
B: [3,2,1,4,7]
输出:3
解释:
长度最长的公共子数组是 [3, 2, 1]

思路

动态规划

  1. 类似最长公共子序列,如果相等的话,长度加一,否则表示以当前位置结尾的最长公共子序列为0

代码

class Solution {
    public int findLength(int[] nums1, int[] nums2) {
        int m = nums1.length, n = nums2.length;
        int f[][] = new int[m + 1][n + 1];
        int ans = 0;
        for (int i = 1; i <= m; i ++ ) {
            for (int j = 1; j <= n; j ++ ) {
                if (nums1[i - 1] == nums2[j - 1]) {
                    f[i][j] = f[i - 1][j - 1] + 1;
                } else {
                    f[i][j] = 0;
                }
                ans = Math.max(ans, f[i][j]);
            }
        }
        return ans;
    }
}
举报

相关推荐

0 条评论