Skip to content

Commit 81c55fa

Browse files
authored
Merge pull request #1357 from i-mprovising/main
[i-mprovising] Week 04 solutions
2 parents 00114e6 + e71b698 commit 81c55fa

File tree

4 files changed

+112
-0
lines changed

4 files changed

+112
-0
lines changed

coin-change/i-mprovising.py

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
"""
2+
Time complexity O(len(coins) * amount)
3+
Space complexity O(amount)
4+
5+
Dynamic programming
6+
"""
7+
8+
class Solution:
9+
def coinChange(self, coins: List[int], amount: int) -> int:
10+
coins = sorted(coins)
11+
12+
if amount == 0 :
13+
return 0
14+
15+
dp = [0] + [-1 for _ in range(amount)]
16+
17+
for i in range(coins[0], amount+1):
18+
tmp = []
19+
for x in coins:
20+
if i - x >= 0:
21+
if dp[i - x] != -1:
22+
tmp.append(dp[i - x] + 1)
23+
if len(tmp) == 0:
24+
dp[i] = -1
25+
else:
26+
dp[i] = min(tmp)
27+
28+
if dp[-1] == 0:
29+
return -1
30+
return dp[-1]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
"""
2+
Time complexity O(logn)
3+
Space compexity O(1)
4+
5+
Binary search
6+
"""
7+
8+
class Solution:
9+
10+
def findMin(self, nums: List[int]) -> int:
11+
start = 1
12+
end = len(nums) - 1
13+
14+
while start <= end:
15+
mid = (start + end) // 2
16+
if nums[mid-1] > nums[mid]:
17+
return nums[mid]
18+
if nums[0] < nums[mid]:
19+
start = mid + 1
20+
else:
21+
end = mid - 1
22+
23+
return nums[0]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
"""
2+
Time complexity O(n)
3+
"""
4+
from collections import deque
5+
6+
class Solution:
7+
def maxDepth(self, root: Optional[TreeNode]) -> int:
8+
if not root:
9+
return 0
10+
11+
max_depth = 0
12+
13+
# bfs
14+
q = deque([[root, 1]])
15+
while(q):
16+
node, depth = q.pop()
17+
if max_depth < depth:
18+
max_depth = depth
19+
if node.left:
20+
q.append([node.left, depth+1])
21+
if node.right:
22+
q.append([node.right, depth+1])
23+
24+
return max_depth
+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
"""
2+
Time complexity O(n+m)
3+
"""
4+
5+
class Solution:
6+
def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
7+
if not (list1 or list2):
8+
return list1 or list2 # if empty list
9+
10+
nums = []
11+
while(list1 or list2):
12+
if not list1:
13+
val = list2.val
14+
list2 = list2.next
15+
elif not list2:
16+
val = list1.val
17+
list1 = list1.next
18+
else:
19+
if list1.val <= list2.val:
20+
val = list1.val
21+
list1 = list1.next
22+
else:
23+
val = list2.val
24+
list2 = list2.next
25+
nums.append(val)
26+
27+
head = ListNode(nums[0])
28+
node = head
29+
if len(nums) == 1:
30+
return head
31+
for n in nums[1:]:
32+
tmp = ListNode(n)
33+
node.next = tmp
34+
node = tmp
35+
return head

0 commit comments

Comments
 (0)