2
def __init__(self, pos, speed, idx, prev=None, next=None):11
def getCollisionTimes(self, cars: List[List[int]]) -> List[float]:12
colis_times = [-1] * len(cars)13
cars = [Car(pos, sp, i) for i, (pos, sp) in enumerate(cars)]14
for i in range(len(cars) - 1):15
cars[i].next = cars[i + 1]16
for i in range(1, len(cars)):17
cars[i].prev = cars[i - 1]20
((b.pos - a.pos) / (a.speed - b.speed), a.idx, a)21
for i, (a, b) in enumerate(zip(cars, cars[1:]))24
heapify(catchup_order)27
catchup_time, idx, car = heappop(catchup_order)28
if colis_times[idx] > -1:29
continue # ith car has already caught up30
colis_times[idx] = catchup_time32
continue # no car is following us33
car.prev.next, car.next.prev = car.next, car.prev34
if car.next.speed >= car.prev.speed:35
continue # the follower is too slow to catch up36
new_catchup_time = (car.next.pos - car.prev.pos) / (37
car.prev.speed - car.next.speed39
heappush(catchup_order, (new_catchup_time, car.prev.idx, car.prev))