Ответ
Наивное решение с вложенными циклами имеет сложность O(n*m), где n и m — длины массивов.
Оптимальное решение с использованием хэш-таблицы (Set):
- Создаем Set из первого массива — O(n)
- Фильтруем второй массив, оставляя элементы из Set — O(m)
- Общая сложность — O(n + m)
Пример:
function intersection(arr1, arr2) {
const set = new Set(arr1);
return arr2.filter(item => set.has(item));
}
Если массивы отсортированы, можно использовать метод двух указателей со сложностью O(n + m) без дополнительной памяти.
Ответ 18+ 🔞
А, ну это же классика, блядь! Смотри, как обычно бывает: сидит такой разработчик, чешет репу, и думает: "Да ебана-рот, тут же просто! Два цикла, хуяк-хуяк — и готово!". И пишет он это своё "произведение", а сложность у него получается O(n*m), то есть, если массивы по миллиону элементов — пиздец, комп просто встанет колом, как Герасим над прудом с Муму, блядь.
А потом приходит какой-нибудь хитрожопый сеньор, смотрит на этот код и такой: "Э, сабака сука, э бошка думай!". И предлагает решение, от которого волосы дыбом — не от сложности, а от простоты, ёпта!
Вот смотри, гениальность в чём:
- Берёшь первый массив и нахуяриваешь из него
Set. Это, типа, такая штука, где всё уникальное и искать там — мгновенно, O(1). Затраты — O(n). - Потом проходишься по второму массиву и фильтруешь его, оставляя только те элементы, которые есть в этом сете. Затраты — O(m).
- Итого: O(n + m). Вместо O(n*m)! Это как вместо того, чтобы пешком через всю страну тащиться, сесть на хуй с горы и прилететь за секунду. Удивление пиздец!
Вот тебе пример кода, красота же:
function intersection(arr1, arr2) {
const set = new Set(arr1);
return arr2.filter(item => set.has(item));
}
Но! Если тебе вдруг принесут массивы уже отсортированные — тут вообще ёперный театр начинается. Можно использовать метод двух указателей. Это как два чекиста идут по двум спискам, сверяют фамилии, и никому не нужно лишней памяти — O(n + m) и терпения ноль ебать на доп. расходы.
Короче, мораль: прежде чем вложенные циклы городить, подумай — а нет ли тут хитрых структур данных, которые всё ускорят, как ёбаный турбонаддув?