Menu
CoddyTech

Split Array Largest Sum

Дан массив nums неотрицательных целых чисел и целое число k. Разделите nums ровно на k частей, каждая из которых представляет собой непустой непрерывный отрезок значений, при этом порядок частей должен сохраняться. У каждой части есть сумма, а стоимость разбиения равна наибольшей из этих сумм.

Верните минимальную стоимость, достижимую при любом разбиении на k частей.

Функция

splitArray(nums: integer-array, k: integer) → integer
numsinteger-array
неотрицательные значения по порядку
kinteger
количество смежных частей, на которые их нужно разделить
Возвращаетinteger
наименьшее возможное значение суммы наибольшей части

Ограничения

  • 1 ≤ nums.length ≤ 5000
  • 0 ≤ nums[i] ≤ 105
  • 1 ≤ k ≤ nums.length
  • Каждая часть содержит как минимум одно значение. Сумма значений части, в которой все значения равны 0, равна 0, и это допустимо.

Примеры

Ввод
nums = [6, 2, 9, 4, 7, 3]k = 3
Вывод
13
Пояснение
Разбиение [6, 2], [9, 4], [7, 3] даёт суммы 8, 13 и 10, поэтому его стоимость равна 13. Ни одно разбиение не имеет стоимость 12: если упаковывать части слева направо так, чтобы каждая сумма была не больше 12, получатся [6, 2], [9], [4, 7], [3] — четыре части, хотя разрешено только три.

lock icon+20 скрытых тестов при отправке

challenge icon

Дополнительный вопрос

Каждая жадная проверка считывает все значения n. С помощью префиксных сумм проверка может вместо этого находить конец каждой части бинарным поиском. Насколько быстрее становится весь метод, когда k мало, а nums — длинный?

Сбросить код
def splitArray(nums, k):
    # Напишите код здесь
Тестовые случаи

Случай 1

Случай 2

Случай 3

Ввод

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

Ожидается

13