Menu
CoddyTech

Book Allocation Problem

Une étagère contient des livres dans un ordre fixe, et pages[i] est le nombre de pages du livre i. Répartis les livres entre students étudiants : chaque étudiant reçoit un bloc continu de livres voisins, au moins un livre chacun, et chaque livre est attribué à exactement un étudiant. La charge d’un étudiant correspond au nombre total de pages qu’il reçoit.

Renvoie la plus petite valeur possible de la charge la plus élevée. S’il y a plus d’étudiants que de livres, renvoie -1.

Fonction

allocateBooks(pages: integer-array, students: integer) → integer
pagesinteger-array
le nombre de pages de chaque livre, dans l’ordre sur l’étagère
studentsinteger
le nombre d’élèves qui se partagent les livres
Renvoieinteger
la charge maximale minimale possible, ou -1 lorsqu’il y a plus d’étudiants que de livres

Contraintes

  • 1 ≤ pages.length ≤ 5000
  • 1 ≤ pages[i] ≤ 105
  • 1 ≤ students ≤ 104
  • Renvoyez -1 lorsque students > pages.length.

Exemples

Entrée
pages = [25, 40, 15, 30, 50]students = 3
Sortie
65
Explication
Distribue [25, 40], [15, 30] et [50] : les charges sont de 65, 45 et 50. Une limite de 64 ne convient pas : la distribution donne [25], [40, 15], [30], [50], soit quatre élèves.
challenge icon

Pour aller plus loin

Prouvez que la part moyenne, arrondie à l’entier supérieur, à laquelle on ajoute le livre le plus épais, constitue toujours une borne valide. Combien de vérifications cette borne supérieure permet-elle d’économiser pour une étagère de livres minces ?

Réinitialiser le code
def allocateBooks(pages, students):
    # Écrivez le code ici

Test #1

Test #2

Test #3

Arguments

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

Résultat attendu

65