← 返回课程路线 第四阶段 · S4-05 · 60 分钟

排好序,再选对工具去查找和计数

这一课只练一件事:拿到一批数据后,先看清 ,再决定用、先后扫描,还是复用。必会:判断何时该用排序、处理好、按取值范围选出数组或映射方案。最小示例:6 名学生的成绩 90 78 85 90 85 90,分数范围 0 <= 分数 <= 100,1 <= n <= 1000,要求统计每个分数出现次数,并输出出现次数最多的分数。样例追踪:排序后是 78 85 85 90 90 90,扫描一遍数出 78 出现 1 次、85 出现 2 次、90 出现 3 次,最高频分数是 90。边界是 n=1(这唯一一个分数本身就是最高频,次数为 1),以及多个分数并列最高频时按“取数值更小的分数”统一规则。建议掌握:分数范围很小(0~100)时可以直接开计数数组,比排序更省事。范围变得很大(比如到 10 的 9 次方)时改用映射结构是拓展。这里不会在浏览器里运行 C++。

必会:能说明何时用排序;能处理重复元素;能按范围选择数组或映射方案 建议掌握:范围很小时直接用计数数组比排序更省事 拓展:范围很大时改用映射结构(如 map),现在不用当硬门槛

任务 1:先选出该用计数数组还是排序后扫描

决定了工具选择:范围小的整数适合直接开 ;范围较大或不是整数下标时,先 再扫描更通用。点不认识的词可看基础解释。

必会:能说出分数范围 0~100 时可以直接用计数数组统计次数;不方便用计数数组时要先排序,让相同的分数挨在一起。这里不会在浏览器里运行 C++,只练习选择和走过程。

分数范围是 0~100,要统计每个分数出现次数,该怎么做最省事?数据范围 · 必会

如果不方便开计数数组,想找出现次数最多的分数,还能怎么做?处理重复 · 必会