【LeetCode】2187. 完成旅途的最少时间

1. 题意

2. 分析

二分法有一个关键特征:如果答案answer满足题意,那么对于任何整数i,如果有i>=answer,那么i也会是一个存在的解,只不过不是最优解。

本题想要找出一个达到 totalTrips 趟需要的最少时间成本t,那么对于题目来说任何大于t的数也会是解,但不是最优解;任何小于t的数都不是解。这样整个值域就被分成了两部分,区间[0,t) 和 [t, +∞),如下图所示:

那么使用二分法不断的折中找出这个边界值即可。

3. 代码

python 复制代码
class Solution:
    def minimumTime(self, time: List[int], totalTrips: int) -> int:
        left = 1
        max_time = time[0]
        for cur_time in time:
            max_time = max(max_time, cur_time)
        
        # 如果由这辆最慢的车完成totalTrips 需要的时间
        right = max_time * totalTrips
        while(left <= right):
            mid = (left+right)//2
            if self.check(mid, totalTrips, time):
                right = mid-1
            else:
                left = mid+1
        return left
            
    # time_cost 需要花费的最少时间
    # times 时间数组
    def check(self, time_cost, totalTrips, times):
        cnt = 0
        for time in times:
            cnt += (time_cost//time) # 当前这个time可以完成几趟
        return cnt >= totalTrips
相关推荐
zyl76514 小时前
FlashAttention 详解:从 GPU 硬件、普通 Attention 到分块计算与 Online Softmax
算法
爱读书的小胖18 小时前
LeetCode 122:买卖股票的最佳时机 II(C)解题分析
算法
结局无敌18 小时前
React Native for OpenHarmony 实战:三方库 react-native-modal-dialog 的鸿蒙化适配指南
深度学习·算法·react native·react.js·harmonyos
OPEN-F19 小时前
ROS2系列教程:上位机建图与导航(原理综合)
算法·机器人
weixin_3077791319 小时前
C++代码实现MATLAB中的fitrtree函数功能
开发语言·c++·算法·matlab
tomwang032219 小时前
路径优化建模、优化算法分类及工程化小结
算法·数学建模·分类
小羊没烦恼!19 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp
2501_9269783319 小时前
人机通信协议--人和机器之间的交互想象
人工智能·经验分享·算法·ai写作
行者全栈架构师19 小时前
【鸿蒙心迹】互动卡片全链路——把核心功能放到桌面(FormKit 实战)(HarmonyOS 7.x)
前端·算法·架构
无定义_20 小时前
10.11日常训练
算法