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