Menu
CoddyTech

Split Array Largest Sum

Otrzymujesz tablicę nums nieujemnych liczb całkowitych oraz liczbę całkowitą k. Podziel nums na dokładnie k części, z których każda jest niepustym ciągiem sąsiadujących wartości, a części zachowują swoją kolejność. Każda część ma sumę, a koszt podziału to największa z tych sum.

Zwróć najmniejszy koszt, jaki można uzyskać przy dowolnym podziale na k części.

Funkcja

splitArray(nums: integer-array, k: integer) → integer
numsinteger-array
wartości nieujemne, w kolejności
kinteger
liczba spójnych części, na które należy je podzielić
Zwracainteger
najmniejsza możliwa wartość sumy największej części

Ograniczenia

  • 1 ≤ nums.length ≤ 5000
  • 0 ≤ nums[i] ≤ 105
  • 1 ≤ k ≤ nums.length
  • Każda część zawiera co najmniej jedną wartość. Część, której wszystkie wartości wynoszą 0, ma sumę 0, co jest dozwolone.

Przykłady

Wejście
nums = [6, 2, 9, 4, 7, 3]k = 3
Wyjście
13
Wyjaśnienie
Podział [6, 2], [9, 4], [7, 3] ma sumy 8, 13 i 10, więc jego koszt wynosi 13. Żaden podział nie ma kosztu 12: pakując elementy od lewej do prawej tak, aby każda suma wynosiła najwyżej 12, otrzymujemy [6, 2], [9], [4, 7], [3] — cztery części, choć dozwolone są tylko trzy.

lock icon+20 ukrytych testów przy wysłaniu

challenge icon

Pytanie dodatkowe

Każde zachłanne sprawdzenie odczytuje wszystkie n wartości. Dzięki sumom prefiksowym sprawdzenie może zamiast tego znaleźć, gdzie kończy się każda część, za pomocą wyszukiwania binarnego. Jak szybko działa cała metoda, gdy k jest małe, a nums jest długie?

Zresetuj kod
def splitArray(nums, k):
    # Wpisz kod tutaj
Przypadki testowe

Przypadek 1

Przypadek 2

Przypadek 3

Wejście

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

Oczekiwane

13