У цьому простому виклику вам надається вхідний масив L
невід'ємних цілих чисел та кількість бін b
більше 0, але не більше довжини L
. Ваш код повинен повернути новий масив M
, довжина якого b
і який бінірував масив L
. Це найлегше пояснити на прикладах.
L = [1,0,5,1]
і b = 2
повертається M = [1,6]
.
L = [0,3,7,2,5,1]
і b = 3
повертається M = [3,9,6]
.
Поки так просто. Однак у цьому питанні b
не обов’язково ділитися len(L)
. У цьому випадку в останньому смітнику буде лише менше номерів для його складання.
Кожен контейнер, крім можливо останнього, повинен мати однакову кількість номерів, що сприяє його загальній кількості. Останній контейнер не повинен мати більше внесених до нього номерів, ніж інші контейнери. Останній контейнер повинен мати якомога більше номерів, що сприяють йому, відповідно до інших правил.
L = [0,3,7,2,5,1]
і b = 4
повертається M = [3,9,6,0]
. M = [10,8,0,0]
не є прийнятним висновком, оскільки третій бін не має іменного числа чисел, що сприяють йому як біни 1
та 2
.
L = [0,3,7,2,5]
і b = 2
повертається M = [10,7]
. M = [3, 14]
не є прийнятним виведенням, оскільки останній бін матиме 3
внесені до нього елементи, але перший має лише такий 2
.
L = [1,1,1,1,1,1,1]
і b = 3
повертається M = [3,3,1]
.
Як остаточне правило, ваш код повинен працювати в лінійний час.
Ви можете використовувати будь-яку мову чи бібліотеки, які вам подобаються, і можна вважати, що введення надається будь-яким зручним для вас способом.
Виявляється, є деякі входи, які неможливо вирішити. Наприклад [1,1,1,1,1]
і b=4
. Ваш код може виводити все, що заманеться для цих входів.
your code must run in linear time
- Я знайшов би будь-який алгоритм, який не дотримується цього природно досить дивного