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

pythonserver side programmingprogramming更新于 2026/1/23 7:08:17

假设我们有一个名为 logs 的数字列表和另一个值 limit。logs[i] 中的每个元素代表第 i 个用户生成的日志的大小。limit 表示我们可以存储在数据库中的日志总大小。我们必须找到最大的 x,使得如果我们将 logs 中的每个日志截断为最大大小 x,则剩余日志大小的总和最多为 limit。如果不需要截断日志,则只需返回最大的日志大小。

因此,如果输入为 logs = [500, 200, 10000, 500, 4000] limit = 3000,则输出将为 900,因为我们将日志截断为 900,然后我们可以得到 [500, 200, 900, 500, 900] 现在总和为 3000

为了解决这个问题,我们将遵循以下步骤 −

  • lo := 0
  • hi := 1 + 日志的最大值
  • while lo + 1 < hi,执行
    • mi := lo + floor of (hi - lo)/2
    • 如果列表中所有元素的总和(logs 中每个 log 的 mi 和 log 的最小值)<= limit,则
      • lo := mi
    • 否则,
      • hi := mi
  • 返回 lo

示例

让我们看看下面的实现以便更好地理解 −

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

相关文章


有用资源