Это зависит.Если один набор существенно меньше другого или по какой-то другой причине вы ожидаете, что пересечение будет довольно разреженным, тогда двоичный поиск может быть оправдан.В противном случае, вероятно, проще всего пройти через оба сразу.Если текущий элемент в одном элементе меньше, чем в другом, перейдите к следующему элементу в этом массиве.Когда / если вы получаете равные элементы, вы отправляете это как вывод и переходите к следующему элементу в обоих массивах.(Это предполагает, что, как вы и предлагали, вы, конечно, уже отсортировали оба).
Это операция O (N + M), где N - размер одного массива, а M - размер.другого.Используя бинарный поиск, вы получаете O (N lg 2 M) вместо этого, что может быть меньшей сложностью, если один массив намного меньше другого, но, скорее всего, будет чистый убыток, если они близкик одному и тому же размеру.
В зависимости от того, что вам нужно / нужно, версии, которые пытаются просто подсчитать вхождения, могут вызвать довольно существенную проблему: если в одном массиве несколько вхождений одного элемента, они все равно будутпосчитайте это как два вхождения этого элемента, указывая на пересечение, которое на самом деле не существует.Вы можете предотвратить это, но это сделает задачу несколько менее тривиальной - вы вставляете элементы из одного массива в вашу хеш-таблицу, но всегда устанавливаете счетчик на 1. Когда это закончено, вы обрабатываете второй массив, устанавливая счетчик на 2если и только если элемент уже присутствует в таблице.