Подсчитайте частоты и оставьте ключи со счётчиком больше одного. Map естественно сохраняет порядок первого появления, а результат содержит каждое повторяющееся число ровно один раз.
Определение элементов, повторяющихся более одного раза
Подсчитайте частоты и оставьте ключи со счётчиком больше одного. Map естественно сохраняет порядок первого появления, а результат содержит каждое повторяющееся число ровно один раз.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Дан список целых чисел. Требуется сформировать массив, содержащий каждый элемент, который встречается в исходном списке хотя бы дважды. В результирующем массиве каждый такой элемент должен присутствовать только один раз, независимо от количества его повторений в исходных данных.
Ответ
Подсчитайте частоты и оставьте ключи со счётчиком больше одного. Map естественно сохраняет порядок первого появления, а результат содержит каждое повторяющееся число ровно один раз.
function duplicates(numbers) {
const counts = new Map();
for (const value of numbers) counts.set(value, (counts.get(value) ?? 0) + 1);
return [...counts].filter(([, count]) => count > 1).map(([value]) => value);
}
Для [3,1,3,2,1,3] получится [3,1]. Ни третье появление 3, ни дополнительные повторы не создают новых элементов результата. Входной массив остаётся неизменным. Ожидаемое время O(n), память O(k) по числу различных значений.