如何在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
相关产品推荐
相关产品推荐

