You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改C++程序以输出数组中所有最高频数字?

解决C++数组多最高频数字输出问题

嘿,我来帮你调整代码,实现输出所有出现频率最高的数字!你的原代码目前只能记录单个最高频数字,我们需要优化逻辑并修正几个问题,具体步骤如下:

原代码的问题分析

  • 非标准变长数组:int arr[arrSize]不符合C标准,C不允许用变量直接定义静态数组大小,建议用vector<int>替代。
  • 数组越界:循环条件i <= arrSize和j <= arrSize会访问数组外的内存(数组下标范围是0到arrSize-1),导致未定义行为。
  • 仅记录单个最高频数字:每次更新最高频时只保存一个数字,无法收集所有同频的最高值。
  • 重复统计:原代码会多次重复统计同一个数字的频率,效率较低(时间复杂度O(n²))。

修改后的代码实现

我们改用哈希表统计频率,效率更高且能轻松收集所有最高频数字:

#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;

int main() {
    int arrSize;
    cin >> arrSize;

    // 用vector存储输入数组,避免非标准变长数组问题
    vector<int> arr(arrSize);
    for(int k = 0; k < arrSize; ++k) {
        cin >> arr[k];
    }

    // 统计每个数字的出现频率
    unordered_map<int, int> freqMap;
    for(int num : arr) {
        freqMap[num]++;
    }

    // 找出最大频率值
    int maxFreq = 0;
    for(auto& pair : freqMap) {
        if(pair.second > maxFreq) {
            maxFreq = pair.second;
        }
    }

    // 收集所有频率等于maxFreq的数字并输出
    cout << "出现频率最高的数字是:";
    for(auto& pair : freqMap) {
        if(pair.second == maxFreq) {
            cout << pair.first << " ";
        }
    }
    cout << endl;

    return 0;
}

代码说明

  1. vector<int>存储数组:替代原有的非标准变长数组,保证代码的可移植性和安全性。
  2. unordered_map统计频率:遍历一次数组即可完成统计,时间复杂度O(n),比原代码的O(n²)高效很多。
  3. 获取最大频率:遍历哈希表找到所有数字中的最高出现次数。
  4. 输出所有最高频数字:再次遍历哈希表,把所有出现次数等于最大频率的数字输出。

测试示例

输入:

11
7 7 7 0 2 2 2 0 9 9 9

输出:

出现频率最高的数字是:9 2 7 

(注:unordered_map是无序的,输出顺序可能和输入顺序不同;如果需要按数字在原数组中首次出现的顺序输出,可以改用map或者额外记录顺序,比如用vector先保存所有唯一数字再统计频率)

内容的提问来源于stack exchange,提问作者Who123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 06:58:11