算法第四版练习1.1.15

该博客介绍了一个用Java编写的静态方法`histogram()`,该方法接收一个整数数组和一个整数M作为参数,返回一个大小为M的数组,其中每个元素表示对应整数在输入数组中出现的次数。方法通过双重循环实现,外层循环按顺序填充结果数组,内层循环计算每个数的出现频率。当输入数组的所有元素都在0到M-1之间时,返回数组的元素之和等于输入数组的长度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

编写一个静态方法histogram(),接受一个整型数组a[]和一个整数M为参数并返回一个大小为M的数组,其中第i个元素的值为整数i在参数数组中出现的次数,如果a[]中的值均在0到M-1之间,返回数组中所有元素之和应该和a.length相等。

解答

这个问题需要使用双重循环,先利用if语句判断第i个元素是否与数组中的数相等,若相等则表示出现一次,从而累加其出现次数,遍历完整个数组后number的值就是第i个元素出现的次数,这是内层循环。外层循环的作用是把M个number值依次放进返回的数组中。这里的外层循环我定义的下标从1开始而不是从0开始,因为题干中描述为“第i个元素”,第i个元素在返回的数组中下标为i-1,这个细节值得注意。
完整代码如下⬇

public class TestFile {
    public static void histogram(int[] a,int M) {
        int[] result = new int[M];
        for(int i=1;i<=M;i++) {
            int number = 0;
            for (int j=0;j<a.length;j++) {
                if (i == a[j]) {
                    number ++;
                }
            }
            result[i-1] = number;
        }
        for (int k=0;k<M;k++) {
            System.out.printf("%d ",result[k]);
        }
    }

    public static void main(String[] args) {
        histogram(new int[] {1,3,5,2,2,1,4,1},8);
    }
}

测试代码

如main函数中一样,使用的测试数组为{1,3,5,2,2,1,4,1},返回的数组所有数相加等于8,则正确。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值