Я думаю, что это довольно частый вопрос, но я не нашел на него ответа с помощью хеширования в C ++.
У меня есть два массива одинаковой длины, которые содержат некоторые элементы, например :
A={5,3,5,4,2}
B={3,4,1,2,1}
Вот необычные элементы: {5,5,1,1}
Я пробовал этот подход - повторяя некоторое время l oop на обоих массивах после сортировки :
while(i<n && j<n) {
if(a[i]<b[j])
uncommon[k++]=a[i++];
else if (a[i] > b[j])
uncommon[k++]=b[j++];
else {
i++;
j++;
}
}
while(i<n && a[i]!=b[j-1])
uncommon[k++]=a[i++];
while(j < n && b[j]!=a[i-1])
uncommon[k++]=b[j++];
, и я получаю правильный ответ. Однако мне нужен лучший подход с точки зрения временной сложности, поскольку сортировка обоих массивов каждый раз может быть дорогостоящей в вычислительном отношении.
Я пытался выполнить хеширование, но не смог полностью разобраться. вставить элементы из arr1 []:
set<int> uncommon;
for (int i=0;i<n1;i++)
uncommon.insert(arr1[i]);
Для сравнения элементов arr2 []:
for (int i = 0; i < n2; i++)
if (uncommon.find(arr2[i]) != uncommon.end())
Теперь я не могу отправить только эти элементы в необычный массив [] что необычно для них обоих.
Спасибо!