哈希映射计数
2026-10-03 16:28:09
发布于:上海
5阅读
0回复
0点赞
题目意为:
先给定一串长度为n的数字,再进行m次查询,每次查询一个数字,判断这个数字在之前一串数字中出现了几次,最后输出结果。
出题人并没有给出数据范围,经本人测试,如果使用以下程序:
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
vector <int> all;
for (int i = 0;i < n;i ++){
int each;
cin >> each;
all.push_back(each);
}
int m;
cin >> m;
for (int i = 0;i < m;i ++){
int each,cnt = 0;
cin >> each;
for (int j = 0;j < all.size();j ++){
if (each == all[j]) cnt ++;
}
cout << cnt << "\n";
}
return 0;
}
只能通过6个测试点。
很明显,双循环的时间复杂度太大,会超时。
所以我在此使用了unordered_map(哈希映射)进行数据存储,键为每种数字,值为它们出现的次数;在查询阶段直接输出对应值即可。
AC程序如下:
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
unordered_map <int,int> all;
for (int i = 0;i < n;i ++){
int each;
cin >> each;
all[each] ++;
}
int m;
cin >> m;
for (int i = 0;i < m;i ++){
int each;
cin >> each;
cout << all[each] << "\n";
}
return 0;
}
给个赞吧,谢谢!
这里空空如也







有帮助,赞一个