本题的一个思路是从小到大遍历全部可能的t,并分别计算当前每一辆车所能够行驶的最多trips数量。
但是如果从1开始,结束在最不理想的情况是max(time) * totalTrip,在数据很大的时候很容易time out。
所以不妨对每一个可能的t重新思考性质。随着t的增加,当前能够行驶的trip数量一定不减,所以是一个在有序数列中寻找最小的t的过程。所以是二分法找最小值。左开右闭。
class Solution:
def minimumTime(self, time: List[int], totalTrips: int) -> int:
def checked(Time):
count = 0
for t in time:
count += Time // t
return count >= totalTrips
l = 1
r = max(time) * totalTrips
while l < r:
mid = (r - l) // 2 + l
if checked(mid):
r = mid # 求解最小值,每次将mid赋值给right端
else:
l = mid + 1
return l
这里辅助函数checked在每一个t时刻,遍历所有的车辆行驶所需时间time, 统计总共能行驶的trips数量,并返回和totalTrips的比较结果。