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

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

假设我们有一个名为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:= logs的最大值+ 1
  • while lo + 1 < hi, do
    • mi := lo + (hi – lo)的下舍整数/ 2
    • 如果以列表中的所有元素(mi和logs中的每个日志的最小值)的总和<= 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教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程