题目描述
给定两个数组A和B,若数组A的某个元素A[i]与数组B中某个元素B[j]满足 A[i] == B[j],则寻找到一个值匹配的二元组(i,j)。 请统计在这两个数组A和B中,一共存在多少个这样的二元组。
输入描述
第一行输入数组A的长度M,
第二行输入数组B的长度N,
第三行输入数组A的值,
第四行输入数组B的值。
输出描述
输出匹配的二元组个数
备注
- 若不存在相等的值,则输出0。
- 所采用的算法复杂度需小于O(N^2),否则会超时。
- 输入数组中允许出现重复数字,一个数字可以匹配多次。
用例1
输入
解释
5 4 1 2 3 4 5 4 3 2 1
Copy
输出
4
Copy
说明
若下标从0开始,则匹配的二元组分别为(0,3),(1,2),(2,1),(3,0),共计4个
用例2
输入
解释
6 3 1 2 4 4 2 1 1 2 3
Copy
输出
4
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
int main()
{
int a;
int b;
cin >> a;
cin.ignore(); // 忽略换行符
cin >> b;
vector<int> v_a(a);
vector<int> v_b(b);
for(int i = 0; i < a; i++)
{
cin >> v_a[i];
}
for(int i = 0; i < b; i++)
{
cin >> v_b[i];
}
unordered_map<int, int> count_map;
// 计算 v_a 中每个元素的出现次数
for(const int &x : v_a)
{
count_map[x]++;
}
int count = 0;
// 遍历 v_b,检查每个元素是否在 count_map 中,是则累加计数
for(const int &x : v_b)
{
if(count_map.find(x) != count_map.end())
{
//对应值累加到count上
count += count_map[x];
}
}
cout << count << endl;
return 0;
}
Copy
说明
若下标从0开始,则匹配的二元组分别为(0,0),(1,1),(4,1),(5,0) 共计4个。