Skip to content

Commit 1c5073f

Browse files
committed
Add prep
1 parent 54a7502 commit 1c5073f

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed

2024/meta/prep.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -821,3 +821,78 @@ def connect(self, root: 'Optional[Node]') -> 'Optional[Node]':
821821
# otherwise it will point to first node of next level
822822
node.next = queue[0]
823823
return root
824+
825+
826+
############# 658. Find K Closest Elements ############
827+
class Solution:
828+
def findClosestElements(self, arr: List[int], k: int, x: int) -> List[int]:
829+
n = len(arr)
830+
left, right = 0, n
831+
while left < right:
832+
mid = (left+right) // 2
833+
if x <= arr[mid]:
834+
right = mid
835+
else:
836+
left = mid+1
837+
center = left
838+
if center == n or (arr[center] != x and center > 0 and abs(x-arr[center-1]) < abs(x-arr[center])):
839+
center -= 1
840+
left, right = center, center # [left, right), right exclusive
841+
for i in range(k):
842+
# print(left, right)
843+
# either decrement left or increment right
844+
if left == 0:
845+
right += 1
846+
elif right >= n:
847+
left -= 1
848+
elif x-arr[left-1] < arr[right]-x:
849+
left -= 1
850+
elif x-arr[left-1] > arr[right]-x:
851+
right += 1
852+
else:
853+
left -= 1
854+
return arr[left:right]
855+
856+
############ 865. Smallest Subtree with all the Deepest Nodes ############
857+
############# 1123. Lowest Common Ancestor of Deepest Leaves ############
858+
class Solution:
859+
def lcaDeepestLeaves(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
860+
861+
def dfs(node):
862+
if not node:
863+
return None, 0
864+
leftfound, leftlevel = dfs(node.left)
865+
rightfound, rightlevel = dfs(node.right)
866+
867+
if leftlevel > rightlevel:
868+
return leftfound, leftlevel+1
869+
if leftlevel < rightlevel:
870+
return rightfound, rightlevel+1
871+
872+
return node, leftlevel+1
873+
874+
return dfs(root)[0]
875+
876+
877+
############# 16. 3Sum Closest ############
878+
class Solution:
879+
def threeSumClosest(self, nums: List[int], target: int) -> int:
880+
res = float('inf')
881+
diff = float('inf')
882+
nums.sort()
883+
n = len(nums)
884+
for i in range(n-2):
885+
j, k = i+1, n-1
886+
while j < k:
887+
s = nums[i] + nums[j] + nums[k]
888+
d = s-target
889+
if abs(d) < diff:
890+
res = s
891+
diff = abs(d)
892+
if d > 0:
893+
k -= 1
894+
elif d < 0:
895+
j += 1
896+
else:
897+
return target
898+
return res

0 commit comments

Comments
 (0)