иначе начинаю цикл, беру первый элемент массива, если ноль, беру следующий, если нет, то считаю сколько раз этот элемент встречается в обоих массивах,
Зачем сколько раз-то?...
Как только для очередного ненулевого элемента первого массива встречается равный ему элемент второго -- тот элемент второго надо обнулить и перейти к следующему ненулевому элементу первого массива. И как только такой встречи не случилось -- всё, совпадения нет. А если удалось пройти первый массив до конца, так и не наткнувшись на невстречу -- значит, совпадение.
Мой предыдущий вариант с манипуляцией знаками подразумевал ровно то же самое, только в качестве маркера использовался знак, а не нулёвость. Достоинство знакового подхода: возможность при необходимости восстановить исходные массивы без потери памяти и при этом практически без потери скорости. Недостаток: вдвое уменьшается допустимый диапазон входных данных; но -- всего лишь вдвое.
----------------------------
Истчо Пыс. Это темо -- явно алгоритмическое, и место ей -- откровенно не в математике, а в компьютерных разделах. Это к сведению модераторов.