AlgoMooc
你已开通华为OD训练营权益,还差最后一步——完成入营激活(兑换课程 + 加飞书 + 登记服务群),即可解锁全部课程与专属服务。去激活 →
← 返回题库

K0065. 魔法服务器集群任务分配

中等通过率 48% · 提交 82 · 通过 39
二分查找贪心模拟

小慕正在管理一个功能强大的计算集群,用于处理一批紧急的项目任务。这些任务按照不同的类型被分成了若干类,每一类都有一定数量的任务。现在,小慕需要将这些任务分配到集群中的多台服务器上,每台服务器只能处理一种类型的任务。一台服务器可以处理多个同类型的任务,但不同类型的任务不能放在同一台服务器上。 为了保证集群稳定运行,小慕引入了的概念: - 负载是指每台服务器上分配的任务数量。如果某台服务器没有分配任何任务,则其负载为0。 - 最高负载是所有服务器中负载的最大值。 在分配任务时,小慕希望找到一个方案,使得最高负载尽可能小。你需要设计一个算法,计算并返回这个最小的最高负载值。

提示:带虚线的词点一下有通俗解释。

输入描述

- 第一行一个整数`serverNum`,表示集群中服务器的数量 (`1 <= serverNum <= 10^9`)。 - 第二行一个整数`taskTypeNum`,表示这批任务的类型数 (`1 <= taskTypeNum <= 100000`,且 `taskTypeNum <= serverNum`)。 - 第三行输入`taskTypeNum`个整数,表示任务数组`task`,其中`task[i]`表示该类型任务的数量 (`1 <= task[i] <= 10^9`)。

输出描述

输出一个整数,表示所有服务器分配任务后**最高负载**的最小值。

示例

示例 1

输入

7 4
10 20 15 5

输出

10

说明:在这个样例中,魔法集群包含7台服务器,任务有4种类型,分别是10个、20个、15个和5个。通过合理的分配,每台服务器的负载可以做到最小的最高负载为10。 此时分配的服务器台数分别是`[1, 2, 2, 1]`。

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解
任务分配示意图(样例:7台服务器,4种任务) 任务A:10 任务B:20 任务C:15 任务D:5 服务器1 服务器2 服务器3 服务器4 服务器5 服务器6 服务器7 10个 10个 10个 10个 5个 5个 负载:10 负载:10 负载:10 负载:10 负载:5 负载:5 负载:0 最高负载 = 10(最小可能值) 图例 分配连线
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「魔法服务器集群任务分配」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。