Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 09fef9f

Browse files
1035.不相交的线题目描述及参数名更新
1 parent 371cfe1 commit 09fef9f

File tree

1 file changed

+30
-26
lines changed

1 file changed

+30
-26
lines changed

‎problems/1035.不相交的线.md‎

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,16 @@
88

99
[力扣题目链接](https://leetcode.cn/problems/uncrossed-lines/)
1010

11-
我们在两条独立的水平线上按给定的顺序写下 A 和 B 中的整数。
11+
在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。
1212

13-
现在,我们可以绘制一些连接两个数字 A[i] 和 B[j]的直线,只要 A[i] == B[j],且我们绘制的直线不与任何其他连线(非水平线)相交。
13+
现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j]的直线,这些直线需要同时满足:
1414

15-
以这种方法绘制线条,并返回我们可以绘制的最大连线数。
15+
* nums1[i] == nums2[j]
16+
* 且绘制的直线不与任何其他连线(非水平线)相交。
17+
18+
请注意,连线即使在端点也不能相交:每个数字只能属于一条连线。
19+
20+
以这种方法绘制线条,并返回可以绘制的最大连线数。
1621

1722

1823
![1035.不相交的线](https://code-thinking-1253855093.file.myqcloud.com/pics/2021032116363533.png)
@@ -26,16 +31,16 @@
2631

2732
相信不少录友看到这道题目都没啥思路,我们来逐步分析一下。
2833

29-
绘制一些连接两个数字 A[i]B[j] 的直线,只要 A[i] == B[j],且直线不能相交!
34+
绘制一些连接两个数字 nums1[i]nums2[j] 的直线,只要 nums1[i] == nums2[j],且直线不能相交!
3035

31-
直线不能相交,这就是说明在字符串A中 找到一个与字符串B相同的子序列,且这个子序列不能改变相对顺序,只要相对顺序不改变,链接相同数字的直线就不会相交
36+
直线不能相交,这就是说明在字符串nums1中 找到一个与字符串nums2相同的子序列,且这个子序列不能改变相对顺序,只要相对顺序不改变,连接相同数字的直线就不会相交
3237

33-
拿示例一A = [1,4,2], B = [1,2,4]为例,相交情况如图:
38+
拿示例一nums1 = [1,4,2], nums2 = [1,2,4]为例,相交情况如图:
3439

3540

3641
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20210914145158.png)
3742

38-
其实也就是说A和B的最长公共子序列是[1,4],长度为2。 这个公共子序列指的是相对顺序不变(即数字4在字符串A中数字1的后面,那么数字4也应该在字符串B数字1的后面)
43+
其实也就是说nums1和nums2的最长公共子序列是[1,4],长度为2。 这个公共子序列指的是相对顺序不变(即数字4在字符串nums1中数字1的后面,那么数字4也应该在字符串nums2数字1的后面)
3944

4045
这么分析完之后,大家可以发现:**本题说是求绘制的最大连线数,其实就是求两个字符串的最长公共子序列的长度!**
4146

@@ -52,18 +57,18 @@
5257
```CPP
5358
class Solution {
5459
public:
55-
int maxUncrossedLines(vector<int>& A, vector<int>& B) {
56-
vector<vector<int>> dp(A.size() + 1, vector<int>(B.size() + 1, 0));
57-
for (int i = 1; i <= A.size(); i++) {
58-
for (int j = 1; j <= B.size(); j++) {
59-
if (A[i - 1] == B[j - 1]) {
60+
int maxUncrossedLines(vector<int>& nums1, vector<int>& nums2) {
61+
vector<vector<int>> dp(nums1.size() + 1, vector<int>(nums2.size() + 1, 0));
62+
for (int i = 1; i <= nums1.size(); i++) {
63+
for (int j = 1; j <= nums2.size(); j++) {
64+
if (nums1[i - 1] == nums2[j - 1]) {
6065
dp[i][j] = dp[i - 1][j - 1] + 1;
6166
} else {
6267
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
6368
}
6469
}
6570
}
66-
return dp[A.size()][B.size()];
71+
return dp[nums1.size()][nums2.size()];
6772
}
6873
};
6974
```
@@ -110,11 +115,11 @@ public:
110115

111116
```python
112117
class Solution:
113-
def maxUncrossedLines(self, A: List[int], B: List[int]) -> int:
114-
dp = [[0] * (len(B)+1) for _ in range(len(A)+1)]
115-
for i in range(1, len(A)+1):
116-
for j in range(1, len(B)+1):
117-
if A[i-1] == B[j-1]:
118+
def maxUncrossedLines(self, nums1: List[int], nums2: List[int]) -> int:
119+
dp = [[0] * (len(nums2)+1) for _ in range(len(nums1)+1)]
120+
for i in range(1, len(nums1)+1):
121+
for j in range(1, len(nums2)+1):
122+
if nums1[i-1] == nums2[j-1]:
118123
dp[i][j] = dp[i-1][j-1] + 1
119124
else:
120125
dp[i][j] = max(dp[i-1][j], dp[i][j-1])
@@ -124,23 +129,22 @@ class Solution:
124129
### Go:
125130

126131
```go
127-
func maxUncrossedLines(A []int, B []int) int {
128-
m, n := len(A), len(B)
129-
dp := make([][]int, m+1)
132+
func maxUncrossedLines(nums1 []int, nums2 []int) int {
133+
dp := make([][]int, len(nums1) + 1)
130134
for i := range dp {
131-
dp[i] = make([]int, n+1)
135+
dp[i] = make([]int, len(nums2) + 1)
132136
}
133137

134-
for i := 1; i <= len(A); i++ {
135-
for j := 1; j <= len(B); j++ {
136-
if (A[i - 1] == B[j - 1]) {
138+
for i := 1; i <= len(nums1); i++ {
139+
for j := 1; j <= len(nums2); j++ {
140+
if (nums1[i - 1] == nums2[j - 1]) {
137141
dp[i][j] = dp[i - 1][j - 1] + 1
138142
} else {
139143
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])
140144
}
141145
}
142146
}
143-
return dp[m][n]
147+
return dp[len(nums1)][len(nums2)]
144148

145149
}
146150

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /