Skip to content

Commit a92f4ef

Browse files
authored
Create 1035. Uncrossed Lines.py
1 parent f67b9c6 commit a92f4ef

1 file changed

Lines changed: 53 additions & 0 deletions

File tree

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#
2+
3+
'''
4+
1. 아이디어 :
5+
완전탐색보다는 dp 문제
6+
nums1[i], nums2[j]를 순회한다.
7+
nums1[i] == nums2[j]인 경우,
8+
i번째 다음, j번째 다음으로 매칭된 값 (i번째 숫자와 j번째 숫자가 모두 연결되지 않은 상태의 최대값)의 +1
9+
아닌 경우,
10+
i-1번째 숫자의 최대값 또는 j-1번째 숫자의 최대값을 누적한다.
11+
12+
2. 시간복잡도 :
13+
O(n * m + n * m) -> O(m + n * m)
14+
15+
3. 자료구조/알고리즘 :
16+
dp
17+
18+
'''
19+
class Solution:
20+
def maxUncrossedLines(self, nums1: List[int], nums2: List[int]) -> int:
21+
# lines, start1, start2,
22+
# dp
23+
# 가장 처음 만나는 숫자
24+
"""
25+
[0],[0],[0],[0],[0],[0],[0]
26+
[0],[0],[0],[1],[1],[1],[2]
27+
[0],[0],[1],[1],[1],[2],[2]
28+
[0],[0],[1],[1],[2],[2],[2]
29+
[0],[0],[1],[2],[2],[2],[3]
30+
[0],[0],[1],[1],[1],[3],[3]
31+
"""
32+
n = len(nums1)
33+
m = len(nums2)
34+
# dp = [[0] * (m+1) for _ in range(n+1)]
35+
36+
# for i in range(1, n+1):
37+
# for j in range(1, m+1):
38+
# if nums1[i-1] == nums2[j-1]:
39+
# dp[i][j] = dp[i-1][j-1]+1
40+
# else:
41+
# dp[i][j] = max(dp[i-1][j], dp[i][j-1])
42+
43+
prev = [0] * (m+1)
44+
for i in range(1, n+1):
45+
curr = [0] * (m+1)
46+
for j in range(1, m+1):
47+
if nums1[i-1] == nums2[j-1]:
48+
curr[j] = prev[j-1]+1
49+
else:
50+
curr[j] = max(curr[j-1], prev[j])
51+
prev = curr
52+
53+
return curr[m]

0 commit comments

Comments
 (0)