W tym prostym wyzwaniu otrzymujesz tablicę wejściową L
nieujemnych liczb całkowitych i liczbę przedziałów b
większą niż 0, ale nie większą niż długość L
. Twój kod musi zwrócić nową tablicę, M
której długość jest równa b
i która podzieliła tablicę L
. Najłatwiej to wyjaśnić przykładami.
L = [1,0,5,1]
i b = 2
wraca M = [1,6]
.
L = [0,3,7,2,5,1]
i b = 3
wraca M = [3,9,6]
.
Do tej pory takie proste. Jednak w tym pytaniu b
niekoniecznie trzeba dzielić len(L)
. W tym przypadku ostatni pojemnik będzie miał po prostu mniej liczb, aby go uzupełnić.
Każdy koszyk, z wyjątkiem ewentualnie ostatniego, musi mieć taką samą liczbę liczb, która przyczynia się do jego sumy. Ostatni pojemnik nie może zawierać więcej numerów niż inne pojemniki. Ostatni pojemnik musi mieć możliwie jak najwięcej liczb, z zastrzeżeniem innych zasad.
L = [0,3,7,2,5,1]
i b = 4
wraca M = [3,9,6,0]
. M = [10,8,0,0]
nie jest akceptowalnym wyjściem, ponieważ trzeci przedział nie ma nazwy liczb, które się do niego przyczyniły, jako pojemników 1
i 2
.
L = [0,3,7,2,5]
i b = 2
wraca M = [10,7]
. M = [3, 14]
nie jest akceptowalnym wyjściem, ponieważ ostatni bin będzie miał 3
do tego elementy, ale tylko pierwszy 2
.
L = [1,1,1,1,1,1,1]
i b = 3
wraca M = [3,3,1]
.
Zgodnie z ostatnią zasadą kod musi działać w czasie liniowym.
Możesz użyć dowolnego języka lub bibliotek, które ci się podobają, i możesz założyć, że dane wejściowe zostały podane w dowolny dogodny dla Ciebie sposób.
Okazuje się, że są pewne dane wejściowe, których nie można rozwiązać. Na przykład [1,1,1,1,1]
i b=4
. Twój kod może wyświetlać, co chce dla tych danych wejściowych.
your code must run in linear time
- Znalazłbym każdy algorytm, który nie podąża za tym z natury dość dziwnym