Skip to content

Commit 280dfcc

Browse files
committed
Add prep
1 parent fa541b9 commit 280dfcc

File tree

3 files changed

+85
-14
lines changed

3 files changed

+85
-14
lines changed

2024/meta/prep.py

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -713,3 +713,74 @@ def dfs(node):
713713
last.right = first
714714
first.left = last
715715
return first
716+
717+
718+
############# 236. Lowest Common Ancestor of a Binary Tree ############
719+
class Solution:
720+
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
721+
"""
722+
情况 1,如果 p 和 q 都在以 root 为根的树中,函数返回的即使 p 和 q 的最近公共祖先节点。
723+
724+
情况 2,那如果 p 和 q 都不在以 root 为根的树中怎么办呢?函数理所当然地返回 null 呗。
725+
726+
情况 3,那如果 p 和 q 只有一个存在于 root 为根的树中呢?函数就会返回那个节点。
727+
"""
728+
if not root:
729+
return None
730+
if root == p or root == q:
731+
return root
732+
733+
left = self.lowestCommonAncestor(root.left, p, q)
734+
right = self.lowestCommonAncestor(root.right, p, q)
735+
736+
# 情况 1,如果 p 和 q 都在以 root 为根的树中,那么 left 和 right 一定分别是 p 和 q(从 base case 看出来的)。
737+
if left and right: # 左右子树存在 p 和 q
738+
return root
739+
# 情况 2,左右子树都找不到 p 或 q,直接返回 null 表示当前子树不符合题目条件
740+
if not left and not right:
741+
return None
742+
# 情况 3,如果 p 和 q 只有一个存在于 root 为根的树中,函数返回该节点。
743+
# Edge case: 如果 p 是 q 的父节点,或 q 是 p 父节点,那么最后返回的也是该父节点
744+
return left if left else right
745+
746+
############# 1060. Missing Element in Sorted Array ############
747+
class Solution:
748+
def missingElement(self, nums: List[int], k: int) -> int:
749+
n = len(nums)
750+
i = 1
751+
while i < n:
752+
diff = nums[i] - nums[i-1]
753+
if diff > k:
754+
return nums[i-1] + k
755+
else:
756+
k -= (diff-1)
757+
i += 1
758+
759+
return nums[n-1] + k
760+
761+
############# 973. K Closest Points to Origin ############
762+
import heapq
763+
class Solution:
764+
def kClosest(self, points: List[List[int]], k: int) -> List[List[int]]:
765+
heap = [] # maxheap
766+
767+
for x, y in points:
768+
dist = x**2+y**2
769+
if len(heap) < k or dist < -heap[0][0]:
770+
heapq.heappush(heap, (-dist, x, y))
771+
if len(heap) > k:
772+
heapq.heappop(heap)
773+
return list(map(lambda x: (x[1],x[2]), heap))
774+
775+
############# 1047. Remove All Adjacent Duplicates In String #############
776+
class Solution:
777+
def removeDuplicates(self, s: str) -> str:
778+
stack = []
779+
for c in s:
780+
stack.append(c)
781+
while len(stack) >= 2 and stack[-1] == stack[-2]:
782+
stack.pop()
783+
stack.pop()
784+
785+
786+
return ''.join(stack)

array-range/1060. Missing Element in Sorted Array.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
class Solution:
22
def missingElement(self, nums: List[int], k: int) -> int:
3-
"""
4-
O(n) time complexity, n = len(nums)
5-
"""
63
n = len(nums)
7-
diff_count = 0
8-
for i in range(1, n):
9-
diff_count = nums[i] - nums[i-1] - 1
10-
if (diff_count >= k):
11-
return nums[i-1]+k
12-
k -= diff_count
13-
return nums[n-1]+k
4+
i = 1
5+
while i < n:
6+
diff = nums[i] - nums[i-1]
7+
if diff > k:
8+
return nums[i-1] + k
9+
else:
10+
k -= (diff-1)
11+
i += 1
12+
13+
return nums[n-1] + k
1414

1515
"""
1616
# Naive Approach: O(k) time complexity
@@ -30,4 +30,4 @@ def missingElement(self, nums: List[int], k: int) -> int:
3030
candidate += 1
3131
k -= 1
3232
return candidate-1
33-
"""
33+
"""

binary-tree-lowest-common-ancestor/236. Lowest Common Ancestor of a Binary Tree.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -
1111
return None
1212
if root == p or root == q:
1313
return root
14-
14+
1515
left = self.lowestCommonAncestor(root.left, p, q)
1616
right = self.lowestCommonAncestor(root.right, p, q)
17-
17+
1818
# 情况 1,如果 p 和 q 都在以 root 为根的树中,那么 left 和 right 一定分别是 p 和 q(从 base case 看出来的)。
1919
if left and right: # 左右子树存在 p 和 q
2020
return root
2121
# 情况 2,左右子树都找不到 p 或 q,直接返回 null 表示当前子树不符合题目条件
2222
if not left and not right:
2323
return None
2424
# 情况 3,如果 p 和 q 只有一个存在于 root 为根的树中,函数返回该节点。
25-
return left if left else right
25+
return left if left else right

0 commit comments

Comments
 (0)