Представьте, что у нас есть два списка и вы хотите знать посты элементов из одного списка в другом. Для иллюстрации:Элементы карты в списке позиций в другом списке
List<String> one = Arrays.asList("B", "I", "G");
List<String> another = Arrays.asList("L", "A", "R", "G", "E");
Результат будет выглядеть так:
[-1, -1, 3]
, потому что ни B, ни я не происходит во втором списке, но G делает на 3-й позиции.
Это то, что я пришел с до сих пор:
<E> List<Integer> indices(List<E> elements, List<E> container) {
List<Integer> indices = new ArrayList<>(elements.size());
for (int i = 0; i < elements.size(); i++) {
indices.add(container.indexOf(indices.get(i)));
}
return indices;
}
Есть ли быстрее решение, которое позволяет избежать внутреннего цикла в List.indexOf()
?
@Sneaky Я уверен, что динамическое программирование подход может улучшить его от п * м к оценке, которая может приближаться к п + т, по предварительной обработке каждого массива в последовательности и слиянии как в общую структуру данных которые могут быть проверены на предмет перекрытия. – chrylis