'''
给你一个整数数组 ranks ,表示一些机械工的能力值 。
ranks i 是第 i 位机械工的能力值。能力值为 r 的机械工可以在 r * n^2 分钟内修好 n 辆车。
同时给你一个整数 cars ,表示总共需要修理的汽车数目。
请你返回修理所有汽车 最少 需要多少时间。
注意:所有机械工可以同时修理汽车。
'''
from typing import List
class Solution:
def repairCars(self, ranks: List[int], cars: int) -> int:
# 确定时间范围的上下界
low = 1
high = max(ranks) * cars * cars
while low < high:
mid = (low + high) // 2
total_cars_fixed = 0
# 计算在mid时间内每位机械工能修好多少辆车 利用二分搜索找到满足条件的最小值
for rank in ranks:
total_cars_fixed += int((mid // rank)**0.5)
if total_cars_fixed >= cars:
high = mid
else:
low = mid + 1
return low