Menu
CoddyTech

Split Array Largest Sum

On vous donne un tableau nums d’entiers non négatifs et un entier k. Découpez nums en exactement k parties, chaque partie étant une séquence non vide de valeurs voisines, et en conservant l’ordre des parties. Chaque partie a une somme, et le coût d’un découpage est la plus grande de ces sommes.

Renvoyez le coût minimal qu’un découpage en k parties peut atteindre.

Fonction

splitArray(nums: integer-array, k: integer) → integer
numsinteger-array
les valeurs non négatives, dans l’ordre
kinteger
le nombre de parties contiguës dans lesquelles les découper
Renvoieinteger
la plus petite valeur possible de la somme de la plus grande partie

Contraintes

  • 1 ≤ nums.length ≤ 5000
  • 0 ≤ nums[i] ≤ 105
  • 1 ≤ k ≤ nums.length
  • Chaque partie contient au moins une valeur. Une partie dont toutes les valeurs sont égales à 0 a une somme de 0, ce qui est autorisé.

Exemples

Entrée
nums = [6, 2, 9, 4, 7, 3]k = 3
Sortie
13
Explication
La partition [6, 2], [9, 4], [7, 3] a pour sommes 8, 13 et 10, donc son coût est de 13. Aucune partition n’a un coût de 12 : en regroupant les éléments de gauche à droite avec une somme maximale de 12 pour chaque groupe, on obtient [6, 2], [9], [4, 7], [3], soit quatre groupes alors que seuls trois sont autorisés.

lock icon+20 tests cachés à la soumission

challenge icon

Pour aller plus loin

Chaque vérification gloutonne lit toutes les valeurs n. Avec des sommes préfixes, une vérification peut plutôt trouver où se termine chaque partie par recherche binaire. Quelle est la rapidité de la méthode complète lorsque k est petit et que nums est long ?

Réinitialiser le code
def splitArray(nums, k):
    # Écrivez le code ici
Cas de test

Cas 1

Cas 2

Cas 3

Entrée

nums = [6, 2, 9, 4, 7, 3]
k = 3

Attendu

13