用 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
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

