Определение повторяющихся чисел в массиве

Посчитайте частоты и верните уникальные числа с частотой больше одного, отсортированные по возрастанию, как в примерах.

Короткий ответ

Что ответить на собеседовании

Посчитайте частоты и верните уникальные числа с частотой больше одного, отсортированные по возрастанию, как в примерах.

Подробный разбор

Ответ с пояснениями

Условие

Создайте функцию 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). Пустой вход и список без повторов дают пустой список. Исходная последовательность не изменяется.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее