Пересечение множеств
Множества удаляют повторы, а сортировка задаёт порядок вывода.
Как к ней подойти
Увидите, как множества помогают сравнивать группы без повторяющихся элементов.
Множество хранит каждый элемент один раз. Пересечение 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).