假设我们有一个称为日志的数字列表和另一个值限制。logs[i] 中的每个元素表示第 i 个用户生成的日志的大小。限制代表我们可以存储在数据库中的日志总大小。我们必须找到最大的 x,如果我们将日志中的每个日志截断为最大大小 x,并且左日志大小的总和最多为 limit。如果不需要截断日志,则只需返回最大的日志大小。
所以,如果输入像logs = [500, 200, 10000, 500, 4000] limit = 3000,那么输出就会是900,因为我们把logs truncate to 900,那么我们可以得到[500, 200, 900, 500 , 900] 现在总和是 3000
让我们看看以下实现以获得更好的理解 -
def solve(logs, limit): lo, hi = 0, max(logs) + 1 while lo + 1 < hi: mi = lo + (hi - lo) // 2 if sum(min(mi, log) for log in logs) <= limit: lo = mi else: hi = mi return lo logs = [500, 200, 10000, 500, 4000] limit = 3000 print(solve(logs, limit))
[500, 200, 10000, 500, 4000], 3000输出结果
900