Java - 使用并行数组查找常见的频繁数字

标签 java arrays

我有一个数组并且已经对其进行了排序。我希望能够找到哪些数字重复。接下来,我希望能够计算这些数字重复的次数。例如,在列表 [1,2,3,3,4,4] 3 和 4 中重复,并且它们都重复两次。我的以下代码能够找到哪些数字重复,但无法让我思考如何计算它们每个重复的次数。我正在使用ArrayList。尝试跳过这一点并将所有内容保留为纯粹的数组(不包括 HashMap )。感谢任何帮助。谢啦。

public static void main(String[] args) {          
        int[] num = {1,2,3,3,4,4}; 

        for(int x : num){
            System.out.print(x + " ");  
        }

        System.out.println("\n" + freq(num));
    }

    public static ArrayList<Integer> freq(int[] num){    
        ArrayList<Integer> list = new ArrayList<>();

        for(int x=0; x < num.length-1; x++){
            if(num[x] == num[x+1]){
                if(!list.contains(num[x])){  
                    list.add(num[x]); 
                }
            } 
        }           
        return list;
    }  

最佳答案

好吧,由于您的数组已排序,您可以使用另一个数组,其中每个索引对应于该数字的点击量:

int[] count = new int[num[num.length - 1]];

然后您可以为每场比赛增加此计数器的索引:

count[num[x] - 1] = count[num[x] - 1] + 1;

但这不会压缩您的表示,只是将其转换为另一种形式。由于您在计算之前不知道结果长度,因此没有列表甚至更好的映射的更紧凑表示是不可能的,因为在创建时必须知道数组的大小。此解决方案仅适用于大于 0 的数字。对于其他范围,您必须调整偏移量。

关于Java - 使用并行数组查找常见的频繁数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20294239/

相关文章:

java - 使类抽象与使构造函数私有(private)

java - Break 减慢了我的循环速度?

python - 具有 3D 向量的两个 numpy 数组的点积

javascript - JS函数不访问所有数组图片

java - 如何使用java获取最后一个字符串 '22'

java - 如何从处理程序内调用外部方法

java - 如何在 JBoss 7.1.1 中启用查询缓存

java - JAVA中解析二维数组的JSON

arrays - Swift:创建具有不同对象实例默认值的数组

javascript - 将属性添加到 array.reduce() 返回对象的顺序