diff --git a/course-schedule/printjin-gmailcom.py b/course-schedule/printjin-gmailcom.py new file mode 100644 index 000000000..6c067034a --- /dev/null +++ b/course-schedule/printjin-gmailcom.py @@ -0,0 +1,23 @@ +class Solution: + def canFinish(self, numCourses, prerequisites): + from collections import defaultdict + graph = defaultdict(list) + for a, b in prerequisites: + graph[b].append(a) + visited = [0] * numCourses + def dfs(course): + if visited[course] == 1: + return False + if visited[course] == 2: + return True + visited[course] = 1 + for next_course in graph[course]: + if not dfs(next_course): + return False + visited[course] = 2 + return True + for course in range(numCourses): + if not dfs(course): + return False + + return True diff --git a/invert-binary-tree/printjin-gmailcom.py b/invert-binary-tree/printjin-gmailcom.py new file mode 100644 index 000000000..507e1385d --- /dev/null +++ b/invert-binary-tree/printjin-gmailcom.py @@ -0,0 +1,8 @@ +class Solution: + def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]: + if not root: + return None + root.left, root.right = root.right, root.left + self.invertTree(root.left) + self.invertTree(root.right) + return root diff --git a/jump-game/printjin-gmailcom.py b/jump-game/printjin-gmailcom.py new file mode 100644 index 000000000..c9aff5f50 --- /dev/null +++ b/jump-game/printjin-gmailcom.py @@ -0,0 +1,8 @@ +class Solution: + def canJump(self, nums): + max_reach = 0 + for i in range(len(nums)): + if i > max_reach: + return False + max_reach = max(max_reach, i + nums[i]) + return True diff --git a/merge-k-sorted-lists/printjin-gmailcom.py b/merge-k-sorted-lists/printjin-gmailcom.py new file mode 100644 index 000000000..c7c0da8c4 --- /dev/null +++ b/merge-k-sorted-lists/printjin-gmailcom.py @@ -0,0 +1,15 @@ +from typing import List, Optional +class Solution: + def mergeKLists(self, lists)]: + values = [] + for l in lists: + while l: + values.append(l.val) + l = l.next + values.sort() + dummy = ListNode(0) + current = dummy + for val in values: + current.next = ListNode(val) + current = current.next + return dummy.next diff --git a/search-in-rotated-sorted-array/printjin-gmailcom.py b/search-in-rotated-sorted-array/printjin-gmailcom.py new file mode 100644 index 000000000..02823459d --- /dev/null +++ b/search-in-rotated-sorted-array/printjin-gmailcom.py @@ -0,0 +1,18 @@ +class Solution: + def search(self, nums, target): + left, right = 0, len(nums) - 1 + while left <= right: + mid = (left + right) // 2 + if nums[mid] == target: + return mid + if nums[left] <= nums[mid]: + if nums[left] <= target < nums[mid]: + right = mid - 1 + else: + left = mid + 1 + else: + if nums[mid] < target <= nums[right]: + left = mid + 1 + else: + right = mid - 1 + return -1