……
2024-10-13 15:28:43
发布于:浙江
34阅读
0回复
0点赞
各位大佬们看一下,为啥MLE啊
AC狗说要用哈希表或者有序集合
我不会啊咋办
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,a[200005],cnt[1500000005],maxn = -1;
cin >> n;
for(int i = 1;i <= n;i++){
cin >> a[i];
cnt[a[i]]++;
if(a[i] > maxn) maxn = a[i];
}
for(int i = 0;i <= maxn;i++){
if(cnt[i] != 0){
cout << i << ' ' << cnt[i] << endl;
}
}
}
全部评论 1
是因为代码中使用了一个过大的数组 cnt[1500000005] 来统计数字的出现次数。这样会导致内存超限,尤其是对于一些较大的数据范围和输入条件。问题的根源在于直接使用数组来存储数字的出现次数,且数组的大小是按照最大数值范围(即1.5×10^9)分配的,而这显然超出了题目给出的内存限制(128MB)。题目提示了可以使用哈希表或者有序集合来处理。
修复后的代码如下:
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; unordered_map<int, int> cnt; // 用哈希表来统计数字的出现次数 for (int i = 0; i < n; i++) { int num; cin >> num; cnt[num]++; } vector<pair<int, int>> result(cnt.begin(), cnt.end()); // 将哈希表中的数据放入一个可排序的容器 sort(result.begin(), result.end()); // 按照数字从小到大排序 for (auto &p : result) { cout << p.first << ' ' << p.second << endl; // 输出数字和其出现次数 } return 0; }
2024-10-14 来自 浙江
0map<int,int> cnt
大STL照亮世界
2024-10-18 来自 浙江
0
有帮助,赞一个