桶计数
约 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 的分数分布,要几个桶?
登录 后可看答案