2332. The Latest Time to Catch a Bus
Question

Code
class Solution:
def latestTimeCatchTheBus(self, buses: List[int], passengers: List[int], capacity: int) -> int:
B, P = len(buses), len(passengers)
buses.sort()
passengers.sort()
def canGetOn(time):
p = 0
for b in range(B):
cur = 0
# current passenger is the next in line
while p < P and time > passengers[p] and cur < capacity and passengers[p] <= buses[b]:
p += 1
cur += 1
if cur == capacity:
continue
if time <= buses[b]:
return True
b += 1
return False
l, r = 0, 10 ** 9 + 1
while l <= r:
m = l + (r - l) // 2
if canGetOn(m):
if not canGetOn(m + 1):
l = m
break
l = m + 1
else:
r = m - 1
seen = set(passengers)
while l in seen:
l -= 1
return l