Написано: 28.03.2023

F. Составить вектор из количества совпадающих символов.

Задание было предложено на тесте в комании Яндекс.

Задание.

Даны два вектора целых чисел. Размер векторов – одинаковый.

Нужно составить вектор, который для каждого индекса должен содержать количество совпадающих чисел в исходных векторах.

Пример 1.

Входные данные:

a1 = [1,2,3,4,5]
a2 = [4,6,1,3,2]

Результат:

res = [0,0,1,3,4]

Решение.

vector<int> match(vector<int> &a1, vector<int> &a2)
{
    int n = a1.size(), count = 0;
    vector<int> res;
    set<int> s1, s2;

    for(int i = 0; i < n; i++) {
        if(a1[i] != a2[i] && s2.count(a1[i]) > 0 && s1.count(a1[i]) == 0) { // в a1 пришло совпадение (и его раньше не было)
            count++;
        }
        if(a1[i] != a2[i] && s1.count(a2[i]) > 0 && s2.count(a2[i]) == 0) { // в a2 пришло совпадение (и его раньше не было)
            count++;
        }
        if(a1[i] == a2[i] && (s2.count(a1[i]) == 0 || s1.count(a2[i]) == 0)) { // есть прямое совпадение, не учтенное раньше
            count++;
        }
        s1.insert(a1[i]);
        s2.insert(a2[i]);
        res.push_back(count);
    }

	return res;
}