@@ -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 )
0 commit comments