У меня есть два списка.Список L1
содержит все положительные целые числа, список L2
содержит положительные числа (e.g. 0.01,0.1,0.5,3,5,10,100....)
.
Учитывая небольшое положительное число M
(e.g. 0.10948472)
, найдите a,b
из L1 и c
из L2
st (b/a)*c
развернуто, но все еще <=M
Обратите внимание, что список L2
фиксирован (длина около 7000
), список L1
имеет переменную длину (может иметь один элемент или до3000
элементов).
Как мы можем эффективно разработать алгоритм для решения этой проблемы?Я думаю об использовании разделяй и властвуй в списке L1
, чтобы разбить его на две части, а затем объединить, но это не сработало.Кто-нибудь может решить это эффективно?
Обновление: в настоящее время я разработал несколько неэффективных, но правильных решений: сначала отсортируйте «L1».Разделите 'L1' на два блока: один блок - это первые N-1
элементы, другой блок - последний элемент.Предположим, что лучшее a,b,c
было найдено в первых N-1
элементах L1
, я проверяю, можем ли мы найти a
в первом блоке и b
во втором блоке (только один элемент) и некоторые c
, такой, что (b/a)*c
улучшается.Так как я должен пройти через каждый элемент в L2
, хотя это nlogn, он все еще выглядит медленно