题目描述:
我们在两条独立的水平线上按给定的顺序写下 A 和 B 中的整数。
现在,我们可以绘制一些连接两个数字 A[i] 和 B[j] 的直线,只要 A[i] == B[j],且我们绘制的直线不与任何其他连线(非水平线)相交。
以这种方法绘制线条,并返回我们可以绘制的最大连线数。
示例 1:
复杂度是O(n ^ 2)是跑不了的,一直使用动态规划,每次都取出最大值
代码:
class Solution {
public int maxUncrossedLines(int[] A, int[] B) {
int dp[][] = new int[A.length][B.length];
int i = A.length;
int j = B.length;
for (int x = 0 ; x < i; x++) {
for (int y = 0; y < j; y++) {
int tem = 0;
if(A[x] == B[y]){
if(x > 0 && y > 0 ){
tem = dp[x - 1][y - 1] + 1;
}else {
tem = 1;
}
}
int max = 0;
int tems = 0;
if(x > 0){
tems = dp[x-1][y];
}
int temy = 0;
if( y > 0){
temy = dp[x][y - 1];
}
max = Math.max(tem, Math.max(tems,temy));
dp[x][y] = max;
}
}
return dp[A.length - 1][B.length - 1];
}
}