1870. Minimum Speed to Arrive on Time (Medium) - TengnanYao/daily_leetcode GitHub Wiki

class Solution(object):
    def minSpeedOnTime(self, dist, hour):
        """
        :type dist: List[int]
        :type hour: float
        :rtype: int
        """
        result = -1
        def helper(dist, speed):
            res = 0
            for d in dist[ : len(dist) - 1]:
                res += ceil(d * 1.0 / speed)
            res += dist[-1] * 1.0 / speed
            return res
        l, r = 1, max(dist) * 100
        if helper(dist, r) > hour:
            return -1
        while l <= r:
            m = (l + r) // 2
            time = helper(dist, m)
            if time == hour:
                return m
            elif time < hour:
                r = m - 1
            else:
                l = m + 1
        return l