File tree 5 files changed +178
-0
lines changed
non-overlapping-intervals
number-of-connected-components-in-an-undirected-graph
remove-nth-node-from-end-of-list
serialize-and-deserialize-binary-tree
5 files changed +178
-0
lines changed Original file line number Diff line number Diff line change
1
+ """
2
+ Solution: 직접 풀지 못해 해설을 통해 이해하고 풀었습니다.
3
+ Interval 문제가 계속 어렵네요.. 😂
4
+ Time: O(n)
5
+ Space: O(1)
6
+ """
7
+
8
+
9
+ class Solution :
10
+ def eraseOverlapIntervals (self , intervals : List [List [int ]]) -> int :
11
+ intervals .sort ()
12
+
13
+ res = 0
14
+ prevEnd = intervals [0 ][1 ]
15
+ for start , end in intervals [1 :]:
16
+ if start >= prevEnd :
17
+ prevEnd = end
18
+ else :
19
+ res += 1
20
+ prevEnd = min (end , prevEnd )
21
+ return res
Original file line number Diff line number Diff line change
1
+ """
2
+ Solution:
3
+ 인접 그래프를 그려준다.
4
+ dfs 해준다.
5
+ 중복제거를 위해 visit set 을 사용해야한다.
6
+ 모든 노드에 대해 dfs 를 하되 갯수를 count 한다.
7
+ Time: O(n)
8
+ Space: O(n)
9
+ """
10
+
11
+
12
+ class Solution :
13
+ def countComponents (self , n : int , edges : List [List [int ]]) -> int :
14
+
15
+ # 인접 리스트
16
+ graph = {i : [] for i in range (n )}
17
+ for a , b in edges :
18
+ graph [a ].append (b )
19
+ graph [b ].append (a )
20
+
21
+ visit = set ()
22
+
23
+ def dfs (node ):
24
+ if node in visit :
25
+ return
26
+
27
+ visit .add (node )
28
+ for i in graph [node ]:
29
+ if i not in visit :
30
+ dfs (i )
31
+
32
+ count = 0
33
+ for i in range (n ):
34
+ if i not in visit :
35
+ count += 1
36
+ dfs (i )
37
+
38
+ return count
Original file line number Diff line number Diff line change
1
+ """
2
+ Solution:
3
+ 재귀를 통해 끝까지 간뒤 n번째 pop 될때 노드를 삭제해준다.
4
+ Time: O(n)
5
+ Space: O(n)
6
+ """
7
+
8
+
9
+ class Solution :
10
+ def removeNthFromEnd (self , head : Optional [ListNode ], n : int ) -> Optional [ListNode ]:
11
+ dummy = ListNode ()
12
+ dummy .next = head
13
+
14
+ count = 0
15
+
16
+ def dfs (node , prev ):
17
+ nonlocal count
18
+ if not node :
19
+ return
20
+
21
+ dfs (node .next , node )
22
+ count += 1
23
+ if count == n :
24
+ prev .next = node .next
25
+
26
+ dfs (head , dummy )
27
+ return dummy .next
28
+
29
+
30
+ """
31
+ Solution:
32
+ 1) 2 Pointer 로 size - n 까지 이동
33
+ 2) prev 와 curr.next 를 연결
34
+ Time: O(n)
35
+ Space: O(1)
36
+ """
37
+ class Solution :
38
+ def removeNthFromEnd (self , head : Optional [ListNode ], n : int ) -> Optional [ListNode ]:
39
+
40
+ dummy = ListNode (0 , head )
41
+ prev = dummy
42
+ curr = tail = head
43
+
44
+ while n > 0 :
45
+ tail = tail .next
46
+ n -= 1
47
+
48
+ while tail :
49
+ prev = prev .next
50
+ curr = curr .next
51
+ tail = tail .next
52
+
53
+ prev .next = curr .next
54
+
55
+ return dummy .next
Original file line number Diff line number Diff line change
1
+ """
2
+ Solution: val 이 같고, left, right 이 같으면 된다.
3
+ Time: O(n)
4
+ Space: O(n)
5
+ """
6
+
7
+
8
+ class Solution :
9
+ def isSameTree (self , p : Optional [TreeNode ], q : Optional [TreeNode ]) -> bool :
10
+
11
+ if q and p and q .val != p .val :
12
+ return False
13
+ if not p and not q :
14
+ return True
15
+ if (not p and q ) or (p and not q ):
16
+ return False
17
+ return self .isSameTree (p .left , q .left ) and self .isSameTree (p .right , q .right )
Original file line number Diff line number Diff line change
1
+ class Codec :
2
+ """
3
+ Solution: DFS
4
+ Time: O(n)
5
+ Space: O(n)
6
+ """
7
+
8
+ def serialize (self , root ):
9
+ arr = []
10
+
11
+ def dfs (node ):
12
+ if not node :
13
+ arr .append ("null" )
14
+ return
15
+
16
+ arr .append (str (node .val ))
17
+ dfs (node .left )
18
+ dfs (node .right )
19
+
20
+ dfs (root )
21
+
22
+ return "," .join (arr )
23
+
24
+ """
25
+ Solution: DFS
26
+ Time: O(n)
27
+ Space: O(n)
28
+ """
29
+
30
+ def deserialize (self , data ):
31
+ vals = data .split ("," )
32
+ self .i = 0
33
+
34
+ def dfs ():
35
+ if vals [self .i ] == "null" :
36
+ self .i += 1
37
+ return None
38
+
39
+ node = TreeNode ()
40
+ node .val = vals [self .i ]
41
+ self .i += 1
42
+ node .left = dfs ()
43
+ node .right = dfs ()
44
+
45
+ return node
46
+
47
+ return dfs ()
You can’t perform that action at this time.
0 commit comments