Menu
CoddyTech

Split Array Largest Sum

Ricevi un array nums di interi non negativi e un intero k. Dividi nums in esattamente k parti, dove ogni parte è una sequenza non vuota di valori consecutivi e le parti mantengono il loro ordine. Ogni parte ha una somma e il costo di una suddivisione è la più grande di queste somme.

Restituisci il costo minimo raggiungibile con qualsiasi suddivisione in k parti.

Funzione

splitArray(nums: integer-array, k: integer) → integer
numsinteger-array
i valori non negativi, in ordine
kinteger
il numero di parti contigue in cui suddividerli
Restituisceinteger
il valore più piccolo possibile della somma della parte più grande

Vincoli

  • 1 ≤ nums.length ≤ 5000
  • 0 ≤ nums[i] ≤ 105
  • 1 ≤ k ≤ nums.length
  • Ogni parte contiene almeno un valore. Una parte i cui valori sono tutti 0 ha somma pari a 0, il che è consentito.

Esempi

Input
nums = [6, 2, 9, 4, 7, 3]k = 3
Output
13
Spiegazione
La suddivisione [6, 2], [9, 4], [7, 3] ha somme pari a 8, 13 e 10, quindi il suo costo è 13. Nessuna suddivisione ha costo 12: impacchettando le parti da sinistra a destra con ogni somma al massimo pari a 12 si ottengono [6, 2], [9], [4, 7], [3], quattro parti mentre ne sono consentite solo tre.

lock icon+20 test nascosti all’invio

challenge icon

Per approfondire

Ogni verifica greedy legge tutti i valori n. Con le somme prefisse, una verifica può invece trovare dove termina ogni parte tramite ricerca binaria. Quanto diventa veloce l'intero metodo quando k è piccolo e nums è lungo?

Ripristina il codice
def splitArray(nums, k):
    # Scrivi il codice qui
Casi di test

Caso 1

Caso 2

Caso 3

Input

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

Atteso

13