桶计数

8 分钟

当数字的取值范围不大时,可以用"桶"来数数:准备一排桶(其实就是一个数组),下标几就代表数字几,见到一个数就往对应的桶里丢一个(计数加一)。统计、去重、排序都能用,全靠"数字本身当下标"这个巧劲。

#include <iostream>
using namespace std;
int main() {
    int a[8] = {2, 5, 2, 8, 5, 2, 0, 8};
    int cnt[10] = {0};                      // 10 个桶,装 0~9
    for (int x : a) cnt[x]++;               // 见到几就往第几个桶加一
    for (int i = 0; i < 10; i++)
        if (cnt[i]) cout << i << " 出现 " << cnt[i] << " 次\n";
    // 0:1  2:3  5:2  8:2
}

统计 0 到 100 的分数,要 101 个桶(两头的 0 和 100 都要算,是 101 不是 100)。还要保证数字不会超出桶的范围,否则数组越界。

小纸条

统计 0 到 100 的分数分布,要几个桶?

登录 后可看答案

桶计数 · C++ 入门 · op599 课程