Skip to content

Commit 53098d9

Browse files
authored
Merge pull request #2130 from 8804who/main
[8804who] WEEK 04 solutions
2 parents fd2737b + 042bcf5 commit 53098d9

File tree

7 files changed

+138
-0
lines changed

7 files changed

+138
-0
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution:
2+
def maxProfit(self, prices: List[int]) -> int:
3+
answer = 0
4+
5+
min_price = prices[0]
6+
for price in prices:
7+
if min_price>price:
8+
min_price=price
9+
10+
if answer<price-min_price:
11+
answer=price-min_price
12+
return answer
13+

coin-change/8804who.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution:
2+
def coinChange(self, coins: List[int], amount: int) -> int:
3+
dp = [1e9] * (amount+1)
4+
dp[0] = 0
5+
6+
for i in range(1, amount+1):
7+
for coin in coins:
8+
if i-coin>=0:
9+
if dp[i-coin]+1<dp[i]:
10+
dp[i]=dp[i-coin]+1
11+
12+
return -1 if dp[amount]==1e9 else dp[amount]
13+
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution:
2+
def findMin(self, nums: List[int]) -> int:
3+
left = 0
4+
right = len(nums)-1
5+
while True:
6+
mid = (left+right)//2
7+
if nums[left] > nums[right]:
8+
if nums[left] > nums[mid]:
9+
right = mid
10+
else:
11+
left = mid+1
12+
else:
13+
return nums[left]
14+

group-anagrams/8804who.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class Solution:
2+
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
3+
dic=defaultdict(list)
4+
for string in strs:
5+
sorted_str = ''.join(sorted(string))
6+
dic[sorted_str].append(string)
7+
8+
return list(dic.values())
9+
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
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+
class Solution:
8+
def maxDepth(self, root: Optional[TreeNode]) -> int:
9+
if not root:
10+
return 0
11+
12+
def dfs(node, depth):
13+
l, r = depth, depth
14+
15+
if node.left:
16+
l = dfs(node.left, depth+1)
17+
if node.right:
18+
r = dfs(node.right, depth+1)
19+
return max(l, r)
20+
21+
return dfs(root, 1)
22+

merge-two-sorted-lists/8804who.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# Definition for singly-linked list.
2+
# class ListNode:
3+
# def __init__(self, val=0, next=None):
4+
# self.val = val
5+
# self.next = next
6+
class Solution:
7+
def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
8+
sorted_list = []
9+
10+
while True:
11+
if list1 is None and list2 is None:
12+
break
13+
elif list1 is None:
14+
sorted_list.append(list2.val)
15+
list2 = list2.next
16+
elif list2 is None:
17+
sorted_list.append(list1.val)
18+
list1 = list1.next
19+
else:
20+
if list1.val > list2.val:
21+
sorted_list.append(list2.val)
22+
list2 = list2.next
23+
else:
24+
sorted_list.append(list1.val)
25+
list1 = list1.next
26+
27+
def get_node(idx):
28+
if idx < len(sorted_list):
29+
return ListNode(sorted_list[idx], get_node(idx+1))
30+
else:
31+
return None
32+
33+
answer= get_node(0)
34+
35+
return answer
36+

word-search/8804who.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
class Solution:
2+
def exist(self, board: List[List[str]], word: str) -> bool:
3+
moves = [[-1, 0], [1, 0], [0, -1], [0, 1]]
4+
max_y, max_x = len(board)-1, len(board[0])-1
5+
6+
visited = [[False for _ in range(len(board[0]))] for _ in range(len(board))]
7+
8+
9+
def dfs(y, x, idx):
10+
if idx == len(word):
11+
return True
12+
for move in moves:
13+
moved_y, moved_x = y+move[0], x+move[1]
14+
if max_y >= moved_y and moved_y >= 0 and max_x >= moved_x and moved_x >= 0:
15+
if board[moved_y][moved_x] == word[idx] and not visited[moved_y][moved_x]:
16+
visited[moved_y][moved_x] = True
17+
if dfs(moved_y, moved_x, idx+1):
18+
return True
19+
visited[moved_y][moved_x] = False
20+
21+
22+
for y in range(max_y+1):
23+
for x in range(max_x+1):
24+
if board[y][x] == word[0]:
25+
visited[y][x] = True
26+
if dfs(y, x, 1):
27+
return True
28+
visited[y][x] = False
29+
30+
return False
31+

0 commit comments

Comments
 (0)