Даны два слайса. Найти их пересечение — значения, которые есть в обоих. Затем
дописать объединение без повторов.
func Intersect[T comparable](p, q []T) []T
func Union[T comparable](p, q []T) []T
Требования
- Результат — множество: каждое значение не больше одного раза, даже если во
входах оно повторяется.
- Порядок детерминированный — порядок первого появления: для
Intersect —
в p; для Union — сначала значения из p, затем новые из q.
- Входные слайсы не меняются.
nil и пустые входы — пустой результат без
паники.
- Время O(len(p) + len(q)), а не O(len(p)·len(q)): входы бывают по сотне
тысяч элементов.
Пример
p := []int{2, 3, 4, 5, 6}
q := []int{4, 5, 6, 7, 8}
Intersect(p, q) // [4 5 6]
Union(p, q) // [2 3 4 5 6 7 8]
Устно: как изменится решение, если оба слайса заранее отсортированы? А
если нужно учитывать количество повторов?
Разбор и эталонное решение — после своей попытки: на собеседовании подсказок не будет.
Сначала попробуй сам — подсказки не дают готовый ответ.