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

如何在C++中统计数组中重复元素的出现次数?

如何统计数组中重复元素的出现次数并输出对应次数

看起来你已经想到了用双重循环来解决问题,这个思路没问题,不过需要补充一些细节来避免重复统计,同时准确输出你想要的结果。我来帮你完善代码,同时解释清楚逻辑:

首先明确你的核心需求:

  • 数组无重复元素时,输出0
  • 数组有重复元素时,输出该重复元素的出现次数(比如元素1出现2次就输出2)
  • 如果多个元素重复,输出出现次数最多的那个值(若多个元素次数相同,输出该次数即可)

方法1:双重循环(适合小规模数组)

这是基于你给出的代码片段扩展的,核心是用一个标记数组避免重复统计同一个元素:

#include <iostream>
using namespace std;

int main() {
    int arr[5] = { 1, 1, 2, 3, 4};
    int max_count = 0;
    bool counted[5] = {false}; // 标记已经统计过的元素

    for (int i = 0; i < 5; ++i) {
        if (counted[i]) continue; // 跳过已经统计过的重复元素
        int current_count = 1; // 当前元素至少出现1次

        // 和后面的所有元素比较
        for (int j = i + 1; j < 5; ++j) {
            if (arr[i] == arr[j]) {
                current_count++;
                counted[j] = true; // 标记后续重复元素,避免再次统计
            }
        }

        // 更新最大出现次数
        if (current_count > max_count) {
            max_count = current_count;
        }
    }

    // 输出结果:如果最大次数大于1,输出次数;否则输出0
    cout << (max_count > 1 ? max_count : 0) << endl;
    return 0;
}

方法2:哈希表法(更高效,适合大规模数组)

如果数组元素较多,双重循环的O(n²)时间复杂度会有点慢,用哈希表可以把时间复杂度降到O(n),逻辑也更简洁:

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

int main() {
    int arr[5] = { 1, 1, 2, 3, 4};
    int max_count = 0;
    unordered_map<int, int> count_map;

    // 遍历数组,统计每个元素的出现次数
    for (int num : arr) {
        count_map[num]++;
    }

    // 找到出现次数最多的值
    for (auto& pair : count_map) {
        if (pair.second > max_count) {
            max_count = pair.second;
        }
    }

    // 输出结果
    cout << (max_count > 1 ? max_count : 0) << endl;
    return 0;
}

测试验证

  • 当数组是{1,2,3,4,5}时,所有元素出现次数都是1,输出0
  • 当数组是{1,1,2,3,5}时,元素1出现2次,输出2
  • 当数组是{2,2,2,3,4}时,元素2出现3次,输出3
  • 当数组是{1,1,2,2,3}时,元素1和2都出现2次,输出2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:15:15