当前位置: 首页 > article >正文

c++有n个范围是-1e9~1e9的数,去统计每个数的个数?

在C++中,统计每个数的个数可以使用std::mapstd::unordered_map来高效地存储和查询每个数的出现次数。由于数的范围很大(-1e9到1e9),使用数组来直接索引是不现实的,因此使用哈希表(std::unordered_map)是一个更好的选择。

#include <iostream>
#include <unordered_map>
#include <vector>

int main() {
    int n;
    std::cin >> n;  // 输入数的个数

    std::unordered_map<int, int> countMap;  // 用于存储每个数的出现次数
    std::vector<int> numbers(n);  // 存储输入的n个数

    // 输入n个数
    for (int i = 0; i < n; ++i) {
        std::cin >> numbers[i];
    }

    // 统计每个数的出现次数
    for (int num : numbers) {
        countMap[num]++;
    }

    // 输出每个数的出现次数
    for (const auto& pair : countMap) {
        std::cout << "Number " << pair.first << " appears " << pair.second << " times." << std::endl;
    }

    return 0;
}

代码说明:

  1. 输入处理:首先输入数的个数n,然后输入n个数并存储在std::vector<int>中。

  2. 统计次数:使用std::unordered_map<int, int>来统计每个数的出现次数。countMap[num]++会自动处理新数的插入和已有数的计数。

  3. 输出结果:遍历countMap,输出每个数及其出现次数。

复杂度分析:

  • 时间复杂度:插入和查询操作在std::unordered_map中的平均时间复杂度是O(1),因此总的时间复杂度是O(n)。

  • 空间复杂度:最坏情况下,所有数都不同,空间复杂度为O(n)。

注意事项:

  • 如果数的范围较小且分布密集,可以考虑使用数组来统计,但在这个问题中,数的范围太大,使用哈希表是更合适的选择。

  • std::unordered_map是基于哈希表的实现,而std::map是基于红黑树的实现。如果不需要有序输出,std::unordered_map通常更快。


http://www.kler.cn/a/597984.html

相关文章:

  • 位示图大小的计算
  • 【递归、搜索和回溯算法】专题三 :穷举VS暴搜VS深搜VS回溯VS剪枝
  • 【ROS实战】02-ROS架构介绍
  • 如何使用SystemVerilog SVA检查跨时钟域信号?
  • [c语言日寄]数据输入
  • GEO与AISEO的关系解析:核心差异与协同逻辑
  • Qt-Q_ENUM宏和QMetaEnum类
  • java江湖系列——集合世家争霸(下)
  • MySQL 5.7升级8.0报异常:处理新增关键字
  • 在 macOS 上安装 coc.nvim(推荐方式)
  • Java-01-源码篇-并发编程-资源竞争
  • 表达式树和编译原理【10道经典面试题】(中英对照)
  • 线段树与扫描线 —— 详解算法思想及其C++实现
  • python基于spark的心脏病患分类及可视化(源码+lw+部署文档+讲解),源码可白嫖!
  • N列股票收盘价为起点的马科维茨(Markowitz)均值—方差理论
  • 在小米AX6000中添加tailscale monitor
  • JavaScript-作用域、函数进阶、解构赋值、filter详解
  • Jboss
  • SSM社区生活超市管理
  • Powershell WSL Windows系统复制数据到ubuntu子系统系统