Вам дан список имен файлов, и вам нужно вернуть список, что каждый элемент в нем является списком с файлами, имеющими одинаковое содержимое.Также важно отметить, что эти файлы имеют очень большой размер.
Например:
Если мы получили список {"file1", "file2", "file3", "file4", "file5"}
в качестве входных данных, и мы знаем, что file1.content()==file2.content()==file3.content, file4.content==file5.content(), file3.content()!=file4.content()
, то результат должен быть:
{{"file1", "file2", "file3"}, {"file4", "file5"}}
.
Я сказал интервьюеру, что мы можем создать HashMap, который хэширует файлы по их sha512
хэш-коду.Затем мы можем перебирать ключи на карте, для каждого ключа мы перебираем список, сопоставленный с ним, для сравнения пар файлов в списке (для проверки того, что действительно каждая пара файлов имеет одинаковое содержимое).
Единственная проблема, которая у меня возникла с этим решением, заключается в том, что я не возвращал список списков, как упомянуто выше, а только пары дубликатов файлов.Это означает, что для примера выше - я вернул это:
{{"file1", "file2"}, {"file2", "file3"}, {"file4", "file5"}}
.
Я просто не нашел эффективного способа создания требуемого вывода.
В приведенном выше примере мой HashMap потенциально (хотя и не очень) может иметь только один ключ, который сопоставлен со всемивходные файлы.
Для подобных сценариев я не смог найти алгоритм для возврата нужного списка при последнем сравнении O(n^2)
(n
- количество файлов в списке).
Есть ли у вас эффективный способ вернуть желаемый список, учитывая, что у вас уже есть HashMap из sha512
ключей, сопоставленных со списком файлов с этим sha512
хеш-кодом?