Это зависит от вашей реализации набора.
Если у вас есть хэш-набор (поиск O (1)), то подход, обозначенный всеми остальными постерами, верен. Итерация по всем элементам в первом наборе. Если он во втором наборе, то добавьте его к результату. Это выполняется за время O (n).
Если у вас есть набор деревьев (O (LG N) поиск), то этот подход будет работать, но он выполняется в O (N LG N) времени. Ты можешь лучше; есть решение O (n). Я предполагаю, что у вас есть какой-то итератор, который может проходить элементы двух множеств в порядке возрастания. Если вы это сделаете, то вопрос «даны два списка в отсортированном порядке, найдите их пересечение». Это можно сделать, используя модифицированную версию алгоритма, который вы используете для объединения двух диапазонов. Идея состоит в том, чтобы отслеживать два итератора. На каждом шаге сравнивайте первые элементы диапазонов. Если они равны, добавьте элемент к пересечению и продвиньте оба итератора вперед. Если первый меньше второго, тогда продвиньте первый итератор. Если первый элемент больше, продвиньте второй итератор. Это выполняется за время O (n), потому что каждая итерация потребляет как минимум один элемент, а всего O (n) элементов.