对于40%的数据,可以直接双重for循环解决
对于100%的数据,可以排序+双指针解决,也可以输入数组B时直接判断
方案1
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, m, A[100005], B[100005];
cin >> n >> m;
for (int i = 0; i < n; i++) cin >> A[i];
for (int i = 0; i < m; i++) cin >> B[i];
int ans = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if(A[i] == B[j]) ans++;
}
}
cout << ans;
return 0;
}
方案2
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, m, x;
cin >> n >> m;
vector<int> A, B;
for (int i = 0; i < n; i++) {
cin >> x;
A.push_back(x);
}
for (int i = 0; i < m; i++) {
cin >> x;
B.push_back(x);
}
sort(A.begin(), A.end());
sort(B.begin(), B.end());
int p = 0, q = 0, ans = 0;
while (p < A.size() && q < B.size()) {
if (A[p] < B[q]) {
p++; continue;
}
if (A[p] > B[q]) {
q++; continue;
}
ans++; p++; q++;
}
cout << ans;
return 0;
}
方案3
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, m, x;
cin >> n >> m;
set<int> setA;
for (int i = 0; i < n; i++) {
cin >> x;
setA.insert(x);
}
int ans = 0;
for (int i = 0; i < m; i++) {
cin >> x;
if (setA.count(x)) ans++;
}
cout << ans;
return 0;
}