题目
编写一个静态方法histogram(),接收一个整型数组a[]和一个整型M返回一个大小为M的数组 其中第i个元素的值为整数i在参数数组中出现的次数。如果a[]中的值均在到0到M-1之间,返回数组中所有元素之和应该和a.length相等.
分析
读题是真的费劲,整个例子吧
数组a = {7,9,6,7,2,1,6,3,7} , m = 7,新数组b
第0个元素的值为整数0在a中出现的次数:0 = b[0]
第1个元素的值为整数1在a中出现的次数:1 = b[1]
…
第m-1个元素的值为整数m-1在a中出现的次数:k = b[m-1]
如果所有的元素都在0-M之间,返回数组中的所有元素之和应该和a.length相等,这句话好像有点可有可无的意思!!!
Java实现
基础版本
对第i个元素进行依次查找
public static int[] histogram(int[] a,int m){
int[] b = new int[m];
if (m > a.length) {
m = a.length;
}
for (int i = 0; i < m; i++) {
int n = 0;
for (int j = 0; j < a.length; j++) {
if (a[j] == i) n++;
}
b[i] = n;
}
return b;
}
强化版本
数组特性
public static int[] histogram_2(int[] a,int m){
int[] b = new int[m];
for (int i = 0; i < a.length; i++) {
b[a[i]]++;
}
return b;
}
测试 histogram()方法
public static void example09(){
int[] a = new int[]{3,2,7,8,2,5};
int[] b = histogram_2(a,10);
for (int i = 0; i < b.length; i++) {
System.out.print(b[i]+" ");
}
}