查找最大大小以截断日志以将它们完全存储在 Python 中的数据库中的程序

假设我们有一个称为日志的数字列表和另一个值限制。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

猜你喜欢