^; решение имеет среднюю временную сложность O(n + m).
^; решение имеет среднюю временную сложность O(n + m).
Уточнение условия
Формулировка «уникальные элементы в двух списках» может означать разные вещи. В этом решении ищем элементы, которые есть только в первом или только во втором списке, но не присутствуют одновременно в обоих.
Решение через симметрическую разность
def unique_elements(first: list[int], second: list[int]) -> set[int]:
return set(first) ^ set(second)Пример
first = [1, 2, 3, 4]
second = [3, 4, 5, 6]
print(unique_elements(first, second))
# {1, 2, 5, 6}Вариант через разность множеств
def unique_elements(first: list[int], second: list[int]) -> set[int]:
first_set = set(first)
second_set = set(second)
return (first_set - second_set) | (second_set - first_set)Если нужно сохранить порядок
Множество не гарантирует нужный порядок результата. Если порядок важен, можно создать множества для быстрых проверок, а затем пройти по исходным спискам.
def unique_elements_keep_order(first: list[int], second: list[int]) -> list[int]:
first_set = set(first)
second_set = set(second)
result = []
added = set()
for value in first + second:
if value not in first_set or value not in second_set:
if value not in added:
result.append(value)
added.add(value)
return resultСложность
Построение двух множеств и симметрической разности занимает в среднем O(n + m), где n и m — размеры списков. Дополнительная память также равна O(n + m).
Как ответить на собеседовании
Сначала уточню, что под уникальными элементами понимаются элементы, присутствующие только в одном из списков. Затем использую симметрическую разность множеств: set(first) ^ set(second). Это решение работает в среднем за O(n + m), но не сохраняет порядок; если порядок важен, пройду по исходным спискам дополнительно.
Оцени свой прогресс