Uncrossed Lines

MediumArrayDynamic Programming

Solution

import { range } from '@algorithm/lib';
 
export function maxUncrossedLines(nums1: number[], nums2: number[]): number {
  const [m, n] = [nums1.length, nums2.length];
  const dp = Array.from({ length: m + 1 }).map(() => new Array<number>(n + 1).fill(0));
 
  for (const i of range(m)) {
    for (const j of range(n)) {
      if (nums1[i] === nums2[j]) {
        dp[i + 1][j + 1] = dp[i][j] + 1;
      } else {
        dp[i + 1][j + 1] = Math.max(dp[i][j + 1], dp[i + 1][j]);
      }
    }
  }
 
  return dp[m][n];
}