В интервью мне задали следующий вопрос, и я все еще думаю об эффективном способе его выполнения.Массив процентов, который может содержать до 100
У вас есть массив, числа которого представляют процентные доли жидкостей в стволе. У вас также есть API с методом: combine(int x,int y)
, который принимает два входных процента в массиве и объединяет жидкость из одного ствола в другой. Используя эту информацию, вы должны найти максимальное количество бочек, которые могут быть доступны при 100% -ной жидкости.
Пример 1. Массив: 10,15,20,35,55,65
Ans: Количество баррелей будет 2. Так как combine(65,35)
--- один 100% баррель, combine(55,20)
--75% бочка, рядом combine(75,15)
--90% в следующем combine(90,10)
--100% - 1 баррель Так всего 2 бочки
Пример 2: 99,99,99
Ans: Количество бочек было бы 1 здесь, так как вы делаете combine(99,99)
- вы получаете один 100% бочонок, остальная часть жидкости теряется впустую, и вы не можете комбинировать другие бочки с третьим 99% стволом, чтобы сделать it 100
Примечание: после того, как вы выливаете жидкость из одной бочки в другую, вы не сможете использовать ее снова для: combine(55,15)
- 70% ствола. Вы можете использовать 70% барреля, но не 55% и 15% баррелей.
Это похоже на изменение бен-упаковки, которая является NP-трудной, но имеет много хороших схем аппроксимации. Вам нужно найти оптимальный ответ или приблизиться к нему? – Paulpro
Ссылка на bin-packing http://en.wikipedia.org/wiki/Bin_packing_problem, упомянутый Paulpro. Он рекомендовал чтение для вас, чтобы понять и выбрать между методами, которые вы выбрали для решения вопроса. – Zeddy
@Paulpro вариант? Это похоже на точный BPP для меня. –