
本题的一个思路是从小到大遍历全部可能的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的比较结果。


















