0子序列中等 LeetCode718. 最长重复子数组

718. 最长重复子数组

描述

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

分析

  • dp[i][j]
    dp[i][j]表示以nums1[i-1]结尾的子数组和以nums2[j-1]结尾的子数组重复的长度。
  • 动态转移方程
    dp[i][j] = dp[i-1][j-1] + 1;
  • 初始化
    dp[i][0]、dp[0][j]都是0,这样方便后面dp[i][j]的计算,防止越界。

遍历过程中记录最大的长度

class Solution {
    public int findLength(int[] nums1, int[] nums2) {
        int[][] dp = new int[nums1.length+1][nums2.length+1];
        int res = 0;
        for(int i = 1; i <= nums1.length; i++){
            for(int j = 1; j <= nums2.length; j++){
                if(nums1[i-1] == nums2[j-1]){
                    dp[i][j] = dp[i-1][j-1] + 1;
                }
                if(dp[i][j] > res){
                    res = dp[i][j];
                }
            }
        }
        return res;
    }
}
上一篇:临时文本


下一篇:[LeetCode]4.寻找两个正序数组的中位数(Java)