Maximum Length of Repeated Subarray

medium array dp

Problem

Given two integer arrays nums1 and nums2, return the maximum length of a subarray that appears in both arrays.

Inputnums1 = [1,2,3,2,1], nums2 = [3,2,1,4,7]
Output3
The longest common contiguous subarray is [3,2,1].

def find_length(a, b):
    m, n = len(a), len(b)
    dp = [[0] * (n + 1) for _ in range(m + 1)]
    best = 0
    for i in range(1, m + 1):
        for j in range(1, n + 1):
            if a[i-1] == b[j-1]:
                dp[i][j] = dp[i-1][j-1] + 1
                if dp[i][j] > best: best = dp[i][j]
    return best
function findLength(a, b) {
  const m = a.length, n = b.length;
  const dp = Array.from({length: m + 1}, () => new Array(n + 1).fill(0));
  let best = 0;
  for (let i = 1; i <= m; i++)
    for (let j = 1; j <= n; j++)
      if (a[i-1] === b[j-1]) {
        dp[i][j] = dp[i-1][j-1] + 1;
        if (dp[i][j] > best) best = dp[i][j];
      }
  return best;
}
class Solution {
    public int findLength(int[] a, int[] b) {
        int m = a.length, n = b.length, best = 0;
        int[][] dp = new int[m + 1][n + 1];
        for (int i = 1; i <= m; i++)
            for (int j = 1; j <= n; j++)
                if (a[i-1] == b[j-1]) {
                    dp[i][j] = dp[i-1][j-1] + 1;
                    best = Math.max(best, dp[i][j]);
                }
        return best;
    }
}
int findLength(vector<int>& a, vector<int>& b) {
    int m = a.size(), n = b.size(), best = 0;
    vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));
    for (int i = 1; i <= m; i++)
        for (int j = 1; j <= n; j++)
            if (a[i-1] == b[j-1]) {
                dp[i][j] = dp[i-1][j-1] + 1;
                best = max(best, dp[i][j]);
            }
    return best;
}
Time: O(m·n) Space: O(m·n)