Рассмотрим массив [1,2,3,4,3,2,4,1,2]
. Я должен выбрать группу элементов (найти подмассива), общая сумма которых равна 5. После выбора группы эти элементы должны быть удалены из массива, пока не будет найдено сочетание элементов, удовлетворяющих условию. Для данного массива подмассивы будут [1,4] [2,3] [3,2] [4,1]
.Выбор группы элементов из массива, который удовлетворяет определенному условию
Мне нужны идеи о том, как написать оптимизированный алгоритм для этой проблемы.
Моя актуальная проблема имеет массив хэшей, как
[
{name: 'name1', duration: 300.2, song_id: 1},
{name: 'name2', duration: 412.7, song_id: 2}
...
]
Я должен собрать массивы (группы) песен, так что их продолжительность лежит, например, в течение 29-30 минут или 9-10 минут. Длительность, указанная в примере хеша, находится в секундах.
Update:
Там нет Ограничить для числа элементов в выбранных группах.
Вот еще один пример, чтобы лучше понять проблему. Данный массив равен [10,20,30,40,50,5,15,25,35,45,55]
. Мне нужно выбрать группы, общее количество которых составляет 50. Ответы будут [10,20,5,15],[50]
ли вам хотите помочь с проблемой упаковки Bin или аспектами доступа к массиву Ruby? Что вы считали? –
Если вам нужны все такие группы, это кажется ужасно показательным. – Borsunho
Я предполагаю, что вы не хотите иметь фиксированный размер группы в вашем реальном случае. Это разная сложность, чем пример, который вы предоставили. –