Leetcode-1035-不相交的线

描述

1035

思路

  • 使用动态规划
  • 假设数组nums1和nums2的长度分别为m,n。创建m行n列的二维数组dp,其中dp[i][j]表示nums1[0 : i]nums2[0 : j]的最长公共子序列长度
  • 考虑动态规划边界情况:当 i 或 j 为0时,dp[i][j]= 0
  • 当 i>0 且 j>0 时,考虑dp[i][j] 的计算:
  • 当 nums1[i] == nums2[j] 时,dp[i][j] = dp[i - 1][j - 1] + 1
  • 当 nums1[i] != nums2[j] 时,dp[i][j] = Math.max(dp[i][j - 1], dp[i - 1][j])

代码

class Solution{
    public int maxUncrossedLines(int[] nums1, int[] nums2){
        int m = nums1.length, n = nums2.length;
        int[][] dp = new int[m + 1][n + 1];
        for(int i = 1; i <= m; i ++){
            int num1 = nums[i];
            for(int j = 1; j <= n; j++){
                int num2 = nums2[j];
                if(num1 == num2){
                    dp[i][j] = dp[i - 1][j - 1] + 1;
                }else{
                    dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
                }
            }
        }
        return dp[m][n];
    }
}
posted on 2021-05-21 16:41  caoshikui  阅读(169)  评论(0)    收藏  举报