解不相交的线

力扣 1035 解不相交的线

定义dp[i][j] 表 示 数 组 nums1 的 前 i 个 元 素 和 nums2 的 前 j 个 元 素 所 能 绘 制 的 最 大 连 接
数,如果要求dp[i][j],我们首先判断nums1的第i个元素和nums2的第j个元素是否相

如果相等,说明nums1的第i个元素可以和nums2的第j个元素可以连成一条线,这个时
候nums1的前i个元素和nums2的前j个元素所能绘制的最大连接数就是nums1的前i -1
个 元 素 和 nums2 的 前 j -1 个 元 素 所 能 绘 制 的 最 大 连 接 数 加1 , 也 就 是 dp[i][j]=dp[i -1]
[j -1]+1;
如果不相等,我们就把nums1去掉一个元素,计算nums1的前i -1个元素和nums2的前
j 个 元 素 能 绘 制 的 最 大 连 接 数 , 也 就 是 dp[i -1][j] , 或 者 把 nums2 去 掉 一 个 元 素 , 计 算
nums2的前j -1个元素和nums1的前i个元素能绘制的最大连接数,也就是dp[i][j -1] ,
这两种情况我们取最大的即可,所以我们可以找出递推

 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++){
            for(int j =1;j<=n;j++){
                if(nums1[i-1] == nums2[j-1]){
                    dp[i][j] = dp[i-1][j-1]+1;
                }
                else{
                    dp[i][j] = Math.max(dp[i][j-1],dp[i-1][j]);
                }
            }
        }
        return dp[m][n];
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值