LeetCode 1035. Uncrossed Lines
2020-05-26 10:23:36
# leetcode
Problem
LeetCode 1035. Uncrossed Lines
1. 题目简述
我们在两条独立的平行线线上按给定的顺序写下 A 和 B 数组。
我们可以绘制一些连接两个数字 A[i] 和 B[j] 的直线,只要 A[i] == B[j],且我们绘制的直线不与任何其他连线(非水平线)相交。
以这种方法绘制线条,返回我们可以绘制的最大连线数。
Note:
1 <= A.length <= 500
1 <= B.length <= 500
1 <= A[i], B[i] <= 2000
Examples:
Input: A = [1,4,2], B = [1,2,4]
Output: 2
Explanation: We can draw 2 uncrossed lines as in the diagram.
We cannot draw 3 uncrossed lines, because the line from A[1]=4 to B[2]=4 will intersect the line from A[2]=2 to B[1]=2.
2. 算法思路
Dynamic Programming
又是二维数组,又是计算最大值,大概率是用DP来做。
我们假设**dp[i][j]**表示从A[0]到A[i]和B[0]到B[j]的子数组的最大连线数。
那么我们分为两种情况,第一种是A[i]和B[j]有连线,那么dp[i][j]就等于dp[i - 1][j - 1] + 1;如果没有连线,则dp[i][j]和max(dp[i - 1][j], dp[i][j - 1])相等,递推式如下:
\begin{equation}
dp[i][j] = dp[i - 1][j - 1] \text{ if } A[i] = B[j]
\end{equation}
\begin{equation}
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) \text{ if } A[i] \neq B[j]
\end{equation}
3. 解法
Dynamic Programming bottom-up:
1 |
|