Мини-урок · перед практикой

Пересечение множеств

Множества удаляют повторы, а сортировка задаёт порядок вывода.

Как к ней подойти

Увидите, как множества помогают сравнивать группы без повторяющихся элементов.

Коротко о теме

Множество хранит каждый элемент один раз. Пересечение a & b оставляет общие элементы, разность a - b - только элементы a, а объединение a | b собирает обе группы. Если важен порядок вывода, отсортируйте результат отдельно.

Ключевая идея · Пересечение множеств

Оператор & оставляет элементы, присутствующие в обоих множествах.

Проверьте перед запуском

  • Сортировать нужно числа, а не их текстовые записи.
  • Каждый общий элемент выводится один раз.

Сравните свой подход

Ниже - готовое решение, другой способ, если он есть, и важные детали проверки.

Ваше принятое решение

Рекомендуемое решение: Пересечение множеств

Оператор & оставляет элементы, присутствующие в обоих множествах.

a = set(map(int, input().split()))
b = set(map(int, input().split()))
print(*sorted(a & b))

Время: O(n+m+k log k) в среднем; k — размер пересечения. Память: O(n+m).

Другой способ: Два указателя по отсортированным спискам

Меньший элемент не может совпасть с текущим большим, поэтому двигаем его указатель. Запоминаем последнее выведенное значение для удаления повторов.

a = sorted(map(int, input().split()))
b = sorted(map(int, input().split()))
i = j = 0
last = None
while i < len(a) and j < len(b):
    if a[i] < b[j]:
        i += 1
    elif a[i] > b[j]:
        j += 1
    else:
        if a[i] != last:
            print(a[i])
            last = a[i]
        i += 1
        j += 1

Время: O(n log n + m log m). Память: O(n+m).