Определить количество одинаковых элементов в двух заданных массивах

Всем привет, есть такая задача: задано два одномерных массива, одинаковой размерности. Определить количество одинаковых элементов в двух заданных массивах.

Пример входных данных:

A[5] = {2, 0, 4, 12, 7}

В[5] = {0, 1, 7, 7, 5}

Output: 5 Так как одинаковые элементы 0, 0, 7, 7, 7 тогда их количество равняется 5.

А моя программа, к сожалению, выводит количество совпадений и я не знаю как это исправить.

P.S. массив может быть любой размерности, я думаю стоит использовать динамические массивы

#include <iostream>

using namespace std;

int main() {
    int n, count = 0;
    cout << "Enter size of array:";
    cin >> n;
    int* arr1 = new int[n];
    int* arr2 = new int[n];
    cout << "Enter elements of arr1:";
    for (int i = 0; i < n; i++) {
        cin >> arr1[i];
    }
    cout << "Enter elements of arr2:";
    for (int i = 0; i < n; i++) {
        cin >> arr2[i];
    }

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (arr1[i] = arr2[j]) {
                count++;
            }
        }
    }
    cout << count;
}

Ответы (1 шт):

Автор решения: LisovIlya

Чтобы оптимизировать поиск, можно произвести сортировку данных массивов и последущий бинарный поиск каждого элемента наименьшего по размеру массива во втором. Таким образом сложность составит 2 * O(n*log(n)) + n * O(log(n)), что намного быстрее, чем O(n^2) Если функция бинарного поиска возвращает отрицательное значение, тогда такого элемента во втором списке нет, а если неотрицательное, тогда инкрементируем счетчик.

→ Ссылка