本文章主要介绍了编写一个静态方法histogram(),接收一个整型数组a[]和一个整数M为参数并返回一个大小为M 的数组,其中第i个元素的值为整数i在参数数组中出现的次数。如果a[]中的值均在0在M-1之间,具有不错的的参考价值,希望对您有所帮助,如解说有误或未考虑完全的地方,请您留言指出,谢谢!

题目:

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

我的代码:

public class Test {
    
 
    public static void main(String[] args) {
    
 
        int[] a = {
   1, 2, 2, 2, 1, 1, 3}; 
        int M = 7; 
 
        int[] arr = histogram(a, M); 
 
        // 遍历新集合 
        for (int i : arr) {
    
            System.out.println(i); 
        } 
    } 
 
    /** 
     * 获取新的集合数组 
     * 
     * @param a 需要使用的集合 
     * @param M 新集合数组的大小 
     * @return 
     */ 
    public static int[] histogram(int[] a, int M) {
    
 
        Map<Integer, Integer> map = getMap(a); 
 
        int[] arr = new int[M]; 
 
        for (int i = 0; i < arr.length; i++) {
    
            arr[i] = map.containsKey(i) ? map.get(i) : 0; 
        } 
 
        return arr; 
    } 
 
    /** 
     * 获取数组中元素和元素数目的关系集合 
     * 
     * @param a 数组 
     * @return 
     */ 
    public static Map<Integer, Integer> getMap(int[] a) {
    
 
        Map<Integer, Integer> map = new HashMap<>(); 
 
        for (int i : a) {
    
            if (map.containsKey(i)) 
                map.replace(i, map.get(i) + 1); 
            else 
                map.put(i, 1); 
        } 
 
        return map; 
    } 
} 

结果:

0 
3 
3 
1 
0 
0 
0 

大神代码:

public class Node {
    
    public static int[] histogram(int[] a, int M) {
    
        int[] result = new int[M]; 
        for (int i = 0; i < a.length; i++) {
    
            // 只接收0~M-1的值,毕竟下标在这里限制着呢,如果满足这个条件,那就让相应下标对应的数字加1 
            if (a[i] >= 0 && a[i] < M) {
    
                result[a[i]]++; 
            } 
        } 
        return result; 
    } 
 
    public static void main(String[] args) {
    
        int[] a = {
   1, 1, 2, 3, 1, 7, 5, 3, 2, 2, 2, 10}; 
        int[] result = histogram(a, 8); 
        for (int i = 0; i < result.length; i++) {
    
            System.out.printf("%3d", result[i]); 
        } 
    } 
} 

结果:

  0  3  4  2  0  1  0  1 

总结:

相比来说,大神的代码要简练的多,我的思路比较麻烦一点,写代码的过程就是从复杂到简单,慢慢来吧,加油!


发布评论
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

两个char类型的字符相加结果是int类型的整数知识解答
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。