File tree Expand file tree Collapse file tree 5 files changed +130
-0
lines changed
search-in-rotated-sorted-array Expand file tree Collapse file tree 5 files changed +130
-0
lines changed Original file line number Diff line number Diff line change 1+ from collections import deque
2+ class Solution :
3+ # 시간복잡도: O(numCourses + prerequisites의 길이)
4+ # 공간복잡도: O(numCourses + prerequisites의 길이)
5+ def canFinish (self , numCourses : int , prerequisites : List [List [int ]]) -> bool :
6+
7+ reachable = [0 for _ in range (numCourses )]
8+ graph = [[] for _ in range (numCourses )]
9+
10+ for a , b in prerequisites :
11+ reachable [a ] += 1
12+ graph [b ].append (a )
13+
14+ q = deque ()
15+ visited = set ()
16+ for i in range (numCourses ):
17+ if reachable [i ] == 0 :
18+ q .append (i )
19+ visited .add (i )
20+
21+ while q :
22+ node = q .popleft ()
23+
24+ for next_node in graph [node ]:
25+ reachable [next_node ] -= 1
26+ if next_node not in visited and reachable [next_node ] == 0 :
27+ q .append (next_node )
28+ visited .add (next_node )
29+
30+ if len (visited ) == numCourses :
31+ return True
32+
33+ return False
Original file line number Diff line number Diff line change 1+ class Solution :
2+ # 시간복잡도: O(N)
3+ # 공간복잡도: O(1)
4+ def invertTree (self , root : Optional [TreeNode ]) -> Optional [TreeNode ]:
5+ def invert (node ):
6+ if not node :
7+ return
8+
9+ r = invert (node .left )
10+ l = invert (node .right )
11+
12+ node .right = r
13+ node .left = l
14+
15+ return node
16+
17+ invert (root )
18+
19+ return root
Original file line number Diff line number Diff line change 1+ class Solution :
2+ # 시간복잡도: O(N)
3+ # 공간복잡도: O(1)
4+ # 이 문제는 마지막 테케가 통과하지 않아서 답을 참고했습니다.
5+ def canJump (self , nums : List [int ]) -> bool :
6+
7+ gas = 0
8+ for n in nums :
9+ if gas < 0 :
10+ return False
11+ elif n > gas :
12+ gas = n
13+ gas -= 1
14+
15+ return True
Original file line number Diff line number Diff line change 1+ class Solution :
2+ # 시간복잡도: O(NlogK) N: 모든 리스트의 노드 수 합 K: 리스트의 개수
3+ # 공간복잡도: O(1) 기존 노드 재활용
4+ def mergeKLists (self , lists : List [Optional [ListNode ]]) -> Optional [ListNode ]:
5+ if not lists : return None
6+ if len (lists ) == 1 : return lists [0 ]
7+
8+ def merge (a , b ):
9+ res = ListNode ()
10+ cur = res
11+
12+ while a and b :
13+ if a .val > b .val :
14+ cur .next = b
15+ b = b .next
16+ else :
17+ cur .next = a
18+ a = a .next
19+ cur = cur .next
20+
21+ if a :
22+ cur .next = a
23+ else :
24+ cur .next = b
25+
26+ return res .next
27+
28+ def mergeK (lo , hi ):
29+ if lo == hi :
30+ return lists [lo ]
31+
32+ if hi - lo == 1 :
33+ return merge (lists [lo ], lists [hi ])
34+
35+ mid = (lo + hi ) // 2
36+ left = mergeK (lo , mid )
37+ right = mergeK (mid + 1 , hi )
38+
39+ return merge (left , right )
40+
41+ return mergeK (0 , len (lists )- 1 )
Original file line number Diff line number Diff line change 1+ class Solution :
2+ # 시간복잡도: O(logN)
3+ # 공간복잡도: O(1)
4+ def search (self , nums : List [int ], target : int ) -> int :
5+ n = len (nums )
6+ st , en = 0 , n - 1
7+ while st <= en :
8+ mid = (st + en )// 2
9+ if nums [mid ] == target :
10+ return mid
11+ elif nums [mid ] >= nums [st ]:
12+ if nums [st ] <= target <= nums [mid ]:
13+ en = mid - 1
14+ else :
15+ st = mid + 1
16+ else :
17+ if nums [mid ] <= target <= nums [en ]:
18+ st = mid + 1
19+ else :
20+ en = mid - 1
21+
22+ return - 1
You can’t perform that action at this time.
0 commit comments