Я предполагаю, что все ваши массивы отсортированы. Предположим, у нас есть массивы от A_1
до A_n
. Есть счетчик для каждого массива (таким образом, у нас есть n
счетчики i_1
до i_n
, как вы сделали это для двух массивов).
Теперь мы введем минимальную кучу, которая содержит целые массивы таким образом, что минимальный массив - это тот массив с наименьшим на данный момент числом, на который указывает соответствующий указатель. Это означает, что мы можем в любой момент извлечь массив с наименьшим на данный момент номером, на который указывает.
Теперь мы извлекаем минимальный массив из кучи и запоминаем его. Мы продолжаем извлекать минимальный массив, пока число, на которое указывает указатель, остается неизменным. Если мы извлечем все массивы (т. Е. Если все массивы имеют одну и ту же наименьшую на данный момент самую низкую точку, указанную на число), мы знаем, что это число находится на пересечении. Если нет (то есть, если не все массивы содержат одно и то же наименьшее в настоящее время указание на число), мы знаем, что число, которое мы в настоящее время изучаем, не может находиться на пересечении. Таким образом, мы увеличиваем все счетчики до уже извлеченных массивов и помещаем их обратно в кучу.
Мы будем делать это, пока не найдем указатель одного массива, достигающий конца массива. Я прошу прощения за подробное описание, но у меня нет достаточно времени, чтобы разобраться в нем более подробно.
Редактировать.
Если у вас есть один массив с очень небольшим количеством элементов, может быть полезно просто выполнить двоичный поиск в других массивах по этим числам или проверить эти числа с помощью хеш-таблицы.