当前位置:首页 C++ > 正文

C++统计数组重复数个数

作者:野牛程序员:2023-07-07 06:23:29 C++阅读 2965

要统计数组中重复数字的个数,你可以使用C++中的std::mapstd::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_mapstd::vector来实现更高效的解决方案。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击