Skip to content

Commit 2ed86d4

Browse files
authored
Merge pull request #2267 from ppxyn1/main
[ppxyn1] WEEK 10 solutions
2 parents a9c447d + db578d9 commit 2ed86d4

File tree

3 files changed

+76
-0
lines changed

3 files changed

+76
-0
lines changed

invert-binary-tree/ppxyn1.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
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+
8+
# idea : dfs
9+
# Time Complexity : O(n)
10+
11+
class Solution:
12+
def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
13+
if root is None:
14+
return None
15+
16+
tmp = root.left
17+
root.left = root.right
18+
root.right = tmp
19+
20+
self.invertTree(root.left)
21+
self.invertTree(root.right)
22+
return root
23+
24+

jump-game/ppxyn1.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# idea: recursive
2+
# Time Complexity : O(n^n) w.o cache
3+
# : O(n^2) w cache
4+
5+
class Solution:
6+
def canJump(self, nums: List[int]) -> bool:
7+
last_idx = len(nums) -1
8+
9+
@cache
10+
def jump(i):
11+
if i == last_idx:
12+
return True
13+
# jump from 1 to numbers
14+
for j in range(1, nums[i] + 1):
15+
if jump(i + j):
16+
return True
17+
18+
return False
19+
return jump(0)
20+
21+
22+
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# idea : binary search
2+
# Time Complexity : O(log n)
3+
4+
# Sorting is not allowed because it costs O(n log n), so we must handle it using binary search without sorting.
5+
# One way is to check where the sorted order is disrupted.
6+
7+
class Solution:
8+
def search(self, nums: List[int], target: int) -> int:
9+
left, right = 0, len(nums)-1
10+
11+
while left <= right:
12+
mid = (left + right) // 2
13+
14+
if nums[mid] == target:
15+
return mid
16+
17+
if nums[left] <= nums[mid]:
18+
if nums[left] <= target < nums[mid]:
19+
right = mid - 1
20+
else:
21+
left = mid + 1
22+
23+
else:
24+
if nums[mid] < target <= nums[right]:
25+
left = mid + 1
26+
else:
27+
right = mid - 1
28+
return -1
29+
30+

0 commit comments

Comments
 (0)