题目

统计数组中各元素出现次数(数值范围较小时)

思路

读数组后,cnt[v] 对合法下标 v 自增;再遍历值域输出 v: cnt[v],或只输出出现过的值。

解题分析

值域 0~100 时用计数数组 cnt[v] 比排序再扫更简单,O(n) 时间。值域很大时改用 map 或排序后线性扫重复段。

完整程序

import java.io.*;

public class Main {
    public static void main(String[] args) {
        int n = 6;
        int[] cnt = new int[101];
        for (int i = 0; i < n; i++) {
            int x = 1;
            if (x >= 0 && x <= 100) cnt[x]++;
        }
        for (int v = 0; v <= 100; v++)
        if (cnt[v] > 0) System.out.println(v + ":" + cnt[v]);
    }
}

运行示例

输出:

1:2
2:3
3:1