Menu
CoddyTech

Book Allocation Problem

书架上的书按固定顺序排列,pages[i] 表示第 i 本书的页数。把这些书分给 students 个学生:每个学生都要拿到一段连续相邻的书,每人至少一本,而且每本书都必须恰好分给一名学生。学生的负担是他拿到的书的总页数。

返回最重负担的可能最小值。如果学生人数多于书的数量,返回 -1。

函数

allocateBooks(pages: integer-array, students: integer) → integer
pagesinteger-array
每本书的页数,按书架顺序排列
studentsinteger
共享这些书的学生人数
返回值integer
尽可能小的最大负载;如果学生人数多于书本数量,则为 -1

约束条件

  • 1 ≤ pages.length ≤ 5000
  • 1 ≤ pages[i] ≤ 105
  • 1 ≤ students ≤ 104
  • 当 students > pages.length 时返回 -1。

示例

输入
pages = [25, 40, 15, 30, 50]students = 3
输出
65
解释
分发 [25, 40]、[15, 30] 和 [50]:负载分别为 65、45 和 50。限额为 64 时会失败:分发结果是 [25]、[40, 15]、[30]、[50],共 4 名学生。
challenge icon

进阶

证明向上取整后的平均份额加上最厚的书,始终是一个可行的上限。在一排薄书中,这个上限能减少多少次检查?

重置代码
def allocateBooks(pages, students):
    # 在这里编写代码

测试 #1

测试 #2

测试 #3

参数

pages = [25, 40, 15, 30, 50]
students = 3

预期输出

65