Skip to content

Commit e5f2f2a

Browse files
authored
Merge pull request #1939 from hu6r1s/main
[hu6r1s] WEEK 12 Solutions
2 parents a2f003c + 880f228 commit e5f2f2a

File tree

8 files changed

+155
-0
lines changed

8 files changed

+155
-0
lines changed

insert-interval/hu6r1s.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution:
2+
def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:
3+
intervals.append(newInterval)
4+
intervals.sort()
5+
output = [intervals[0]]
6+
for x, y in intervals[1:]:
7+
if output[-1][1] >= x:
8+
output[-1][1] = max(y, output[-1][1])
9+
else:
10+
output.append([x, y])
11+
return output
12+
13+
14+
"""
15+
newInterval을 집어넣은 다음 정렬을 해주면 인덱스 0에 있는 값 기준으로 정렬됨
16+
대소 비교를 해서 이전 배열의 인덱스 1이 현재 배열의 인덱스 0보다 크거나 같으면
17+
값을 변경해주고 아니라면 값을 그냥 추가한다.
18+
"""
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Definition for a binary tree node.
2+
# class TreeNode:
3+
# def __init__(self, val=0, left=None, right=None):
4+
# self.val = val
5+
# self.left = left
6+
# self.right = right
7+
class Solution:
8+
def kthSmallest(self, root: Optional[TreeNode], k: int) -> int:
9+
values = []
10+
def dfs(node):
11+
if not node:
12+
return
13+
14+
dfs(node.left)
15+
values.append(node.val)
16+
dfs(node.right)
17+
18+
19+
dfs(root)
20+
return values[k-1]
21+
22+
"""
23+
이진 탐색 트리는 왼쪽은 val보다 작고 오른쪽은 val보다 큼
24+
그렇기에 중위순회 방식으로 하면 자연스럽게 정렬된 상태로 배열에 들어가게 된다.
25+
"""
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Definition for a binary tree node.
2+
# class TreeNode:
3+
# def __init__(self, x):
4+
# self.val = x
5+
# self.left = None
6+
# self.right = None
7+
8+
class Solution:
9+
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
10+
if p.val < root.val and q.val < root.val:
11+
return self.lowestCommonAncestor(root.left, p, q)
12+
if root.val < p.val and root.val < q.val:
13+
return self.lowestCommonAncestor(root.right, p, q)
14+
return root

meeting-rooms/hu6r1s.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
class Solution:
2+
def canAttendMeetings(self, intervals: List[List[int]]) -> bool:
3+
for i in range(len(intervals)):
4+
for j in range(i + 1, len(intervals)):
5+
if intervals[i][0] < intervals[j][1] and intervals[j][0] < intervals[i][1]:
6+
return False
7+
return True
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution:
2+
def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
3+
intervals.sort()
4+
cnt = 0
5+
pre_end = intervals[0][1]
6+
for i in range(1, len(intervals)):
7+
start, end = intervals[i]
8+
if pre_end > start:
9+
cnt += 1
10+
pre_end = min(end, pre_end)
11+
else:
12+
pre_end = end
13+
return cnt
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
class Solution:
2+
# def countComponents(self, n: int, edges: List[List[int]]) -> int:
3+
# graph = [[] for _ in range(n)]
4+
# for node, adj in edges:
5+
# graph[node].append(adj)
6+
# graph[adj].append(node)
7+
8+
# visited = set()
9+
10+
# def dfs(node):
11+
# visited.add(node)
12+
# for adj in graph[node]:
13+
# if adj not in visited:
14+
# dfs(adj)
15+
16+
# cnt = 0
17+
# for node in range(n):
18+
# if node not in visited:
19+
# cnt += 1
20+
# dfs(node)
21+
# return cnt
22+
23+
24+
def countComponents(self, n: int, edges: List[List[int]]) -> int:
25+
graph = [[] for _ in range(n)]
26+
for node, adj in edges:
27+
graph[node].append(adj)
28+
graph[adj].append(node)
29+
30+
cnt = 0
31+
visited = set()
32+
for node in range(n):
33+
if node in visited:
34+
continue
35+
cnt += 1
36+
queue = deque([node])
37+
while queue:
38+
node = queue.pop()
39+
visited.add(node)
40+
for adj in graph[node]:
41+
if adj not in visited:
42+
queue.append(adj)
43+
return cnt
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Definition for singly-linked list.
2+
# class ListNode:
3+
# def __init__(self, val=0, next=None):
4+
# self.val = val
5+
# self.next = next
6+
class Solution:
7+
def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:
8+
length = 0
9+
node = head
10+
while node:
11+
length += 1
12+
node = node.next
13+
14+
dummy = ListNode(None, head)
15+
node = dummy
16+
for _ in range(length - n):
17+
node = node.next
18+
19+
node.next = node.next.next
20+
return dummy.next

same-tree/hu6r1s.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Definition for a binary tree node.
2+
# class TreeNode:
3+
# def __init__(self, val=0, left=None, right=None):
4+
# self.val = val
5+
# self.left = left
6+
# self.right = right
7+
class Solution:
8+
def isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:
9+
if not p and not q:
10+
return True
11+
if not p or not q:
12+
return False
13+
if p.val != q.val:
14+
return False
15+
return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)

0 commit comments

Comments
 (0)