算法-第四版-练习1.1.15解答

问题

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

解决思路

新建一个数组res,元素个数为M。遍历a,如果a[]中的值均在0到M-1之间,使res对应的元素加1。

代码

package com.furzoom.lab.algs.ch101;

public class E10115
{
    public static int[] histogram(int[] a, int m)
    {
        int[] res = new int[m];
        for (int i = 0; i < a.length; i++)
        {
            if (a[i] >= 0 && a[i] < m)
            {
                res[a[i]]++;
            }
        }
        return res;
    }

    public static void printArray(int[] array) {
        for (int i = 0; i < array.length; i++)
        {
            System.out.print(array[i] + " ");
        }
        System.out.println();
    }
    
    public static void main(String[] args)
    {
        int[] arr1 = {0, 1, 0, 3, 4, 2, 3, 1, 2, 3, 4, 2, 5};
        int[] nums = histogram(arr1, 6);
        printArray(nums);

        int[] arr2 = {1, 3};
        nums = histogram(arr2, 2);
        printArray(nums);

        int[] arr3 = {-1, 0};
        nums = histogram(arr3, 2);
        printArray(nums);
    }

}

结果

2 2 3 3 2 1 
0 1 
1 0 

你可能感兴趣的:(算法-Robert,Sedgewick,Kevin,Wayne)