合规归档场景下,专线按日计费、包不可拆且次序固定。本题求「在不超过 limitDays 个归档日内传完」的最小日容量 cap。
关键性质:容量越大,需要的天数越少(单调),因此可以对答案做二分。
判定函数:给定容量 cap,按固定顺序贪心装箱——同一天尽量连续装下若干完整包,当前包装不下就新开一天。统计所需天数,若 ≤ limitDays 则可行。
二分下界为 max(logs)(单包不能拆),上界为 ∑logs(一天装完全部)。
某金融业务线要做等保合规归档:把近一段时间产生的 n 个加密日志包,按生成顺序上传到监管侧对象存储。第 i 个包大小为 logs[i](单位 GB)。
公司向运营商租用了一条「按日计费」的专线:
财务侧只肯为这次归档买单 limitDays 个归档日。请计算:在不超过 limitDays 天的前提下,专线日容量 cap 至少要开到多大,才能把全部包传完。
请实现:
minArchiveCap(logs: int[], limitDays: int) -> long
(cap 可能超过 32 位有符号整数范围,请使用 64 位整数。)
两行:
logs,表示按生成顺序排列的各包大小limitDays,表示最多可用归档日数约束:
一个整数:最小可行的日容量 cap。
输入:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
5
输出:
15
说明:一种合法的 5 日划分(每天之和 ≤15)为
[1,2,3,4,5] / [6,7] / [8] / [9] / [10]。若 cap=14,则无法在 5 日内传完。
输入:
[3, 2, 2, 4, 1, 4]
3
输出:
6
说明:例如划分为 [3,2] / [2,4] / [1,4],三天用量为 5,6,5。cap=5 时至少需要 4 天,不满足时限。
输入:
[1, 2, 3, 1, 1]
4
输出:
3
说明:例如 [1,2] / [3] / [1] / [1]。任何小于 3 的 cap 都装不下大小为 3 的包。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.