Skip to content

Commit 066dcad

Browse files
committedMay 21, 2021
feat: add solutions to lc problem: No.1035. Uncrossed Lines
1 parent f286747 commit 066dcad

File tree

5 files changed

+147
-2
lines changed

5 files changed

+147
-2
lines changed
 

‎solution/1000-1099/1035.Uncrossed Lines/README.md

+51-1
Original file line numberDiff line numberDiff line change
@@ -52,22 +52,72 @@
5252

5353
<!-- 这里可写通用的实现逻辑 -->
5454

55+
最长公共子序列问题
56+
5557
<!-- tabs:start -->
5658

5759
### **Python3**
5860

5961
<!-- 这里可写当前语言的特殊实现逻辑 -->
6062

6163
```python
62-
64+
class Solution:
65+
def maxUncrossedLines(self, nums1: List[int], nums2: List[int]) -> int:
66+
m, n = len(nums1), len(nums2)
67+
dp = [[0] * (n + 1) for i in range(m + 1)]
68+
for i in range(1, m + 1):
69+
for j in range(1, n + 1):
70+
if nums1[i - 1] == nums2[j - 1]:
71+
dp[i][j] = dp[i - 1][j - 1] + 1
72+
else:
73+
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])
74+
return dp[m][n]
6375
```
6476

6577
### **Java**
6678

6779
<!-- 这里可写当前语言的特殊实现逻辑 -->
6880

6981
```java
82+
class Solution {
83+
public int maxUncrossedLines(int[] nums1, int[] nums2) {
84+
int m = nums1.length;
85+
int n = nums2.length;
86+
int[][] dp = new int[m + 1][n + 1];
87+
for (int i = 1; i <= m; i++) {
88+
for (int j = 1; j <= n; j++) {
89+
if (nums1[i - 1] == nums2[j - 1]) {
90+
dp[i][j] = dp[i - 1][j - 1] + 1;
91+
} else {
92+
dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
93+
}
94+
}
95+
}
96+
return dp[m][n];
97+
}
98+
}
99+
```
70100

101+
### **C++**
102+
103+
```cpp
104+
class Solution {
105+
public:
106+
int maxUncrossedLines(vector<int>& nums1, vector<int>& nums2) {
107+
int m = nums1.size(), n = nums2.size();
108+
vector<vector<int>> dp(m + 1, vector<int>(n + 1));
109+
for (int i = 1; i <= m; ++i) {
110+
for (int j = 1; j <= n; ++j) {
111+
if (nums1[i - 1] == nums2[j - 1]) {
112+
dp[i][j] = dp[i - 1][j - 1] + 1;
113+
} else {
114+
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
115+
}
116+
}
117+
}
118+
return dp[m][n];
119+
}
120+
};
71121
```
72122
73123
### **...**

‎solution/1000-1099/1035.Uncrossed Lines/README_EN.md

+51-1
Original file line numberDiff line numberDiff line change
@@ -101,18 +101,68 @@ We cannot draw 3 uncrossed lines, because the line from A[1]=4 to B[2]=4 will in
101101

102102
## Solutions
103103

104+
Longest common sub-sequences
105+
104106
<!-- tabs:start -->
105107

106108
### **Python3**
107109

108110
```python
109-
111+
class Solution:
112+
def maxUncrossedLines(self, nums1: List[int], nums2: List[int]) -> int:
113+
m, n = len(nums1), len(nums2)
114+
dp = [[0] * (n + 1) for i in range(m + 1)]
115+
for i in range(1, m + 1):
116+
for j in range(1, n + 1):
117+
if nums1[i - 1] == nums2[j - 1]:
118+
dp[i][j] = dp[i - 1][j - 1] + 1
119+
else:
120+
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])
121+
return dp[m][n]
110122
```
111123

112124
### **Java**
113125

114126
```java
127+
class Solution {
128+
public int maxUncrossedLines(int[] nums1, int[] nums2) {
129+
int m = nums1.length;
130+
int n = nums2.length;
131+
int[][] dp = new int[m + 1][n + 1];
132+
for (int i = 1; i <= m; i++) {
133+
for (int j = 1; j <= n; j++) {
134+
if (nums1[i - 1] == nums2[j - 1]) {
135+
dp[i][j] = dp[i - 1][j - 1] + 1;
136+
} else {
137+
dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
138+
}
139+
}
140+
}
141+
return dp[m][n];
142+
}
143+
}
144+
```
115145

146+
### **C++**
147+
148+
```cpp
149+
class Solution {
150+
public:
151+
int maxUncrossedLines(vector<int>& nums1, vector<int>& nums2) {
152+
int m = nums1.size(), n = nums2.size();
153+
vector<vector<int>> dp(m + 1, vector<int>(n + 1));
154+
for (int i = 1; i <= m; ++i) {
155+
for (int j = 1; j <= n; ++j) {
156+
if (nums1[i - 1] == nums2[j - 1]) {
157+
dp[i][j] = dp[i - 1][j - 1] + 1;
158+
} else {
159+
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
160+
}
161+
}
162+
}
163+
return dp[m][n];
164+
}
165+
};
116166
```
117167
118168
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution {
2+
public:
3+
int maxUncrossedLines(vector<int>& nums1, vector<int>& nums2) {
4+
int m = nums1.size(), n = nums2.size();
5+
vector<vector<int>> dp(m + 1, vector<int>(n + 1));
6+
for (int i = 1; i <= m; ++i) {
7+
for (int j = 1; j <= n; ++j) {
8+
if (nums1[i - 1] == nums2[j - 1]) {
9+
dp[i][j] = dp[i - 1][j - 1] + 1;
10+
} else {
11+
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
12+
}
13+
}
14+
}
15+
return dp[m][n];
16+
}
17+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution {
2+
public int maxUncrossedLines(int[] nums1, int[] nums2) {
3+
int m = nums1.length;
4+
int n = nums2.length;
5+
int[][] dp = new int[m + 1][n + 1];
6+
for (int i = 1; i <= m; i++) {
7+
for (int j = 1; j <= n; j++) {
8+
if (nums1[i - 1] == nums2[j - 1]) {
9+
dp[i][j] = dp[i - 1][j - 1] + 1;
10+
} else {
11+
dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
12+
}
13+
}
14+
}
15+
return dp[m][n];
16+
}
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Solution:
2+
def maxUncrossedLines(self, nums1: List[int], nums2: List[int]) -> int:
3+
m, n = len(nums1), len(nums2)
4+
dp = [[0] * (n + 1) for i in range(m + 1)]
5+
for i in range(1, m + 1):
6+
for j in range(1, n + 1):
7+
if nums1[i - 1] == nums2[j - 1]:
8+
dp[i][j] = dp[i - 1][j - 1] + 1
9+
else:
10+
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])
11+
return dp[m][n]

0 commit comments

Comments
 (0)