力扣 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];
}
}