Задание было предложено на тесте в комании Яндекс.
Даны два вектора целых чисел. Размер векторов – одинаковый.
Нужно составить вектор, который для каждого индекса должен содержать количество совпадающих чисел в исходных векторах.
Входные данные:
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;
}