Посчитайте частоты и верните уникальные числа с частотой больше одного, отсортированные по возрастанию, как в примерах.
Определение повторяющихся чисел в массиве
Посчитайте частоты и верните уникальные числа с частотой больше одного, отсортированные по возрастанию, как в примерах.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Создайте функцию find_duplicates, принимающую список целых чисел и возвращающую список всех элементов, которые встречаются более одного раза. Результат должен соответствовать приведённым ниже проверкам.
assert find_duplicates([1, 2, 3, 4, 5, 4, 2]) == [2, 4]
assert find_duplicates([1, 4]) == []
assert find_duplicates([5, 2, 2, 2, 2, 1]) == [2]
Ответ
Посчитайте частоты и верните уникальные числа с частотой больше одного, отсортированные по возрастанию, как в примерах.
from collections import Counter
def find_duplicates(numbers):
counts = Counter(numbers)
return sorted(number for number, count in counts.items() if count > 1)
Для [1, 2, 3, 4, 5, 4, 2] возвращается [2, 4], а не порядок обнаружения повторов [4, 2]. Каждое повторяющееся число присутствует в результате ровно один раз, независимо от количества повторений.
Подсчёт занимает ожидаемо O(n), сортировка k найденных чисел — O(k log k). Пустой вход и список без повторов дают пустой список. Исходная последовательность не изменяется.