题目
统计数组中各元素出现次数(数值范围较小时)
思路
读数组后,cnt[v] 对合法下标 v 自增;再遍历值域输出 v: cnt[v],或只输出出现过的值。
解题分析
值域 0~100 时用计数数组 cnt[v] 比排序再扫更简单,O(n) 时间。值域很大时改用 map 或排序后线性扫重复段。
完整程序
#include <stdio.h>
int main(void)
{
int n, x, cnt[101] = {0};
if (scanf("%d", &n) != 1 || n < 1) {
return 1;
}
for (int i = 0; i < n; i++) {
scanf("%d", &x);
if (x >= 0 && x <= 100) {
cnt[x]++;
}
}
for (int v = 0; v <= 100; v++) {
if (cnt[v]) {
printf("%d:%d\n", v, cnt[v]);
}
}
return 0;
}
运行示例
输入:
6
1 2 1 2 2 3输出:
1:2
2:3
3:1