第85天:100天DSA编码挑战
Source: Dev.to
挑战概述
接受一个新挑战:每天解答 GeeksforGeeks 的每日题目(POTD),并分享我的解法! 💻🔥
问题
完成所有订单的最短时间
GeeksforGeeks – Minimum time to fulfil all orders
难度: Hard 准确率: 66.7%
Geek 正在他家举办派对。为派对,他需要恰好 n 个甜甜圈给客人。Geek 决定向一家附近的餐厅订购甜甜圈,该餐厅有 m 位厨师,每位厨师都有一个等级 r。
解题思路
该问题可以通过对答案(时间)进行二分查找来解决。对于给定的时间 mid,我们计算每位厨师在该时间内可以制作多少个甜甜圈并求和。如果总数至少为 n,则尝试更小的时间;否则,增加时间。
def minimum_time(ranks, n):
# Helper to compute donuts a chef with rank r can make in given time t
def donuts_made(r, t):
# Solve r * k * (k + 1) / 2 = n:
break
if total >= n:
high = mid
else:
low = mid + 1
return low
函数 minimum_time 返回厨师们生产至少 n 个甜甜圈所需的最小时间。