在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