C++统计数组重复数个数
作者:野牛程序员:2023-07-07 06:23:29 C++阅读 2965
要统计数组中重复数字的个数,你可以使用C++中的std::map或std::unordered_map来实现。下面是一个使用std::unordered_map的示例代码:
#include <iostream>
#include <unordered_map>
#include <vector>
int countDuplicates(const std::vector<int>& nums) {
std::unordered_map<int, int> freq;
int count = 0;
// 统计数字的出现频率
for (int num : nums) {
freq[num]++;
}
// 统计重复数字的个数
for (const auto& pair : freq) {
if (pair.second > 1) {
count++;
}
}
return count;
}
int main() {
std::vector<int> nums = {1, 2, 3, 4, 1, 2, 2, 3, 4, 4, 4};
int duplicates = countDuplicates(nums);
std::cout << "重复数字的个数为: " << duplicates << std::endl;
return 0;
}在这个示例中,countDuplicates函数接受一个整数向量作为参数,并返回重复数字的个数。它使用std::unordered_map来统计每个数字出现的频率。然后,遍历哈希表中的每个键值对,如果某个数字的频率大于1,就将计数器增加1。最后,将计数器的值作为结果返回。
以上代码输出为:
重复数字的个数为: 4
根据给定的示例数组,有4个重复的数字:1重复了1次,2重复了2次,3重复了1次,4重复了4次。因此,结果为4。
如果不使用<unordered_map>和<vector>,你可以使用C++标准库中的数组和算法来实现统计重复数字的功能。下面是一个使用数组和算法的示例代码:
#include <iostream>
int countDuplicates(int nums[], int size) {
int count = 0;
// 对数组进行排序
for (int i = 0; i < size; i++) {
for (int j = i + 1; j < size; j++) {
if (nums[i] > nums[j]) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
}
// 统计重复数字的个数
for (int i = 0; i < size - 1; i++) {
if (nums[i] == nums[i + 1]) {
count++;
}
}
return count;
}
int main() {
int nums[] = {1, 2, 3, 4, 1, 2, 2, 3, 4, 4, 4};
int size = sizeof(nums) / sizeof(nums[0]);
int duplicates = countDuplicates(nums, size);
std::cout << "重复数字的个数为: " << duplicates << std::endl;
return 0;
}在这个示例中,countDuplicates函数接受一个整数数组和数组的大小作为参数,并返回重复数字的个数。它使用冒泡排序算法对数组进行排序,然后遍历排序后的数组,如果当前数字和下一个数字相等,则将计数器增加1。最后,将计数器的值作为结果返回。
注意:这种方法的效率相对较低,如果数组规模很大,排序过程可能会变得非常耗时。推荐使用标准库中的std::unordered_map或std::vector来实现更高效的解决方案。
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

- 上一篇:C语言统计数组重复数个数
- 下一篇:using namespace std;有什么用
