[英]How can I find the intersection of two arrays using Hash functions in C++?
[英]To find intersection of two arrays in C++
这是我的代码:
void intersection(int input1[], int input2[], int size1, int size2) {
unordered_map<int,int> mymap;
for(int i=0;i<size1;i++){
if(!mymap.count(input1[i]))
mymap[input1[i]] = 1;
else
mymap[input1[i]]++;
}
for(int i=0; i<size2; i++){
if(mymap.count(input2[i]) > 0){
cout<<input2[i]<<endl;
mymap[input2[i]]--; //Line1
}
}
}
我尝试减少“Line1”中的“key”,但没有得到正确的 output。 样本输入:
尺寸1:6
数组1:2 6 8 5 4 3
尺寸2:7
数组2:2 2 3 4 7 4 3
您的 Output:2 2 3 4 4 3
预期 Output:2 3 4
底层逻辑是正确的,但语法是错误的:
mymap.count(x)
返回 key 存在的次数。 您想要mymap[x]
(或使用std::multi_set
)。
Line1 应该是:
mymap[input2[i]]--;
此外,您的第一个循环(有类似的错误顺便说一句)可以简化为:
std::unordered_map<int,int> mymap;
for(int i=0;i<size1;i++){
mymap[input1[i]]++;
}
所以最终代码:
void intersection(int input1[], int input2[], int size1, int size2) {
std::unordered_map<int,int> mymap;
for(int i=0;i<size1;i++){
mymap[input1[i]]++;
}
for(int i=0; i<size2; i++){
if (mymap[input2[i]] > 0){
cout << input2[i] << endl;
mymap[input2[i]]--;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.