寻找 i 在数组出现的次数,有其它好的方法吗

有数组 a 和整数 m ,另创建数组 arry[m] ,arry[i] 保存的是 i 在数组 a 中出现的次数,我写了两个方法,但都觉得不好,请问你们有什么好的方法吗?

    private static int[] histogram01(int[] a, int m) {
        int[] arry = new int[m];
        int count = 0;
        for (int i = 0; i < m; i++){
            for (int j = 0; j < a.length; j++){
                if (a[j] == i) count++;
            }
            arry[i] = count;
            count = 0;
        }
        return arry;
    }

```java
private static int[] histogram02(int[] a, int m) {
      Arrays.sort(a);
      int[] arry = new int[m];
      int num = 0;
      int count = 0;
      for ( int i = 0, j = 0; i < m; i++){
          if ( i == (num = a[j])){
              for (; j < a.length && a[j] == num; j++){
                  count++;
              }
              arry[i] = count;
              count = 0;
          }
      }
      return arry;
    }

```

数组array 有m个元素的索引是 0 到 m-1
遍历a数组,小于 m 的值,就让数组array对应索引的元素加1
例如,m = 10; int[] arry = new int[10];
如果a[1]的是8, 就让 arry[8] = arry[8] + 1; 相当于 找到一次 8
如果a[1]的是11,超过了m就不计数。

 private static int[] histogram01(int[] a, int m) {
        int[] arry = new int[m];
        for (int i = 0; i < a.length; i++){
            if(a[i] < m){
                arry[a[i]]++;
            }
             
        }
        return arry;
}


    private static int[] histogram01(int[] a, int m) {
        int[] arry = new int[m];
        for (int i = 0; i < m; i++){
             arry[a[i]]++;
        }
        return arry;
    }

思路:
arry初始化之后本来就全是0,对应计数++就行了,不需要双重循环每次只计算其中一个。

两种比较短的,看你喜欢哪种

private static int[] histogram01(int[] a, int m) {
        int[] arry = new int[m];
        for (int num:a){
            arry[num]++;
        }
        return arry;
}
 private static int[] histogram01(int[] a, int m) {
        int[] arry = new int[m];
        Arrays.stream(a).forEach(num->arry[num]++);
        return arry;
}

可以先对数组a进行排序,然后只要确定i在a中连续的长度即可