全部评论 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 来自 浙江

    0

热门讨论