-
-
Notifications
You must be signed in to change notification settings - Fork 361
[dolphinflow86] WEEK 04 Solutions #2741
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,20 @@ | ||
| # 1) Use binary search to halves to search range. Each iteration, | ||
| # compare with nums[pivot] and nums[right] to see which side has a smaller range. | ||
| # Firstly I compare nums[left] with nums[right] so I got the wrong results but end up with the right solution. | ||
| # TC: O(logN) where N is the length of the nums array | ||
| # SC: O(1) | ||
|
|
||
| class Solution: | ||
| def findMin(self, nums: List[int]) -> int: | ||
| n = len(nums) | ||
| left = 0 | ||
| right = n-1 | ||
|
|
||
| while left < right: | ||
| pivot = left + (right - left) // 2 | ||
| if nums[pivot] < nums[right]: | ||
| right = pivot | ||
| else: | ||
| left = pivot + 1 | ||
|
|
||
| return nums[right] |
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🏷️ 알고리즘 패턴 분석
📊 시간/공간 복잡도 분석
피드백: 재귀적으로 각 서브트리의 깊이를 계산하고 최댓값을 상향 전달한다. 개선 제안: 현재 구현이 적절해 보입니다.
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 이거 depth 패러미터 주지 않고 maxDepth 만으로도 구현 가능하세요! 스스로 재귀해서 하면 코드도 엄청 줄일수 있어요, 성능도 같고요 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,20 @@ | ||
| # 1) Use DFS to traverse down to the leaf node. Keep track of depth and return each node's maximum depth of each subtree to the parent node. | ||
| # TC: O(N) where N is the number of node in the binary tree | ||
| # SC: O(H) where H is the height of the binary tree | ||
| # Definition for a binary tree node. | ||
| # class TreeNode: | ||
| # def __init__(self, val=0, left=None, right=None): | ||
| # self.val = val | ||
| # self.left = left | ||
| # self.right = right | ||
| class Solution: | ||
| def dfs(self, node: Optional[TreeNode], depth: int) -> int: | ||
| if not node: | ||
| return depth | ||
|
|
||
| left = self.dfs(node.left, depth + 1) | ||
| right = self.dfs(node.right, depth + 1) | ||
| return max(left, right) | ||
|
|
||
| def maxDepth(self, root: Optional[TreeNode]) -> int: | ||
| return self.dfs(root, 0) |
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🏷️ 알고리즘 패턴 분석
📊 시간/공간 복잡도 분석
피드백: 두 리스트를 순회하며 각 노드를 차례로 이어붙이고 남은 부분을 연결한다. 개선 제안: 현재 구현이 적절해 보입니다.
|
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,27 @@ | ||
| # 1) Use a dummy node and connect the smaller node to the merged list while iterating through both lists. | ||
| # TC: O(N + M) where N is the length of list1 and M is the length of list2. | ||
| # SC: O(1) | ||
| # | ||
| # Definition for singly-linked list. | ||
| # class ListNode: | ||
| # def __init__(self, val=0, next=None): | ||
| # self.val = val | ||
| # self.next = next | ||
|
|
||
| class Solution: | ||
| def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]: | ||
| dummy = ListNode() | ||
| curr = dummy | ||
|
|
||
| while list1 and list2: | ||
| if list1.val < list2.val: | ||
| curr.next = list1 | ||
| list1 = list1.next | ||
| else: | ||
| curr.next = list2 | ||
| list2 = list2.next | ||
| curr = curr.next | ||
|
|
||
| curr.next = list1 if list1 else list2 | ||
|
|
||
| return dummy.next |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🏷️ 알고리즘 패턴 분석
📊 시간/공간 복잡도 분석
피드백: 중간 인덱스(pivot)와 끝 원소를 비교해 왼쪽이 정렬되었는지 여부를 판단하고, 범위를 절반으로 축소한다.
개선 제안: 현재 구현이 적절해 보입니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
혹시 pivot을 (right + left) // 2 가 아닌 left + (right - left) // 2 로 하신 이유가 있으실까요?