Пересечение множеств
Вы решили задачу. Теперь можно сравнить подходы.
Множества удаляют повторы, а сортировка задаёт порядок вывода.
Авторский разбор для локальной версии на основе условия задачи. Это не выгрузка чужих посылок и не официальное решение исходного сайта.
Ваше принятое решение
Рекомендуемое решение: Пересечение множеств
Оператор & оставляет элементы, присутствующие в обоих множествах.
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).
На что обратить внимание
- Сортировать нужно числа, а не их текстовые записи.
- Каждый общий элемент выводится один раз.
Рекомендация учитывает сложность и читаемость для этой задачи. Единственного самого быстрого решения для всех размеров входа и всех компьютеров может не быть.