Java-使用并行数组查找公共频繁数/s

Java-使用并行数组查找公共频繁数/s,java,arrays,Java,Arrays,我有一个数组,并且已经对它进行了排序。我希望能够找到重复的数字。接下来,我想计算这些数字重复了多少次。例如,在一个列表中[1,2,3,3,4,4]3和4重复,它们都重复两次。我下面的代码能够找到哪些数字重复,但无法让我了解如何计算它们每次重复的次数。我正在使用ArrayList。尝试跳过这一点,并将所有内容保留为纯粹的数组,不包括hashmap。谢谢你的帮助。特克斯 public static void main(String[] args) { int[]

我有一个数组,并且已经对它进行了排序。我希望能够找到重复的数字。接下来,我想计算这些数字重复了多少次。例如,在一个列表中[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;
    }  
publicstaticvoidmain(字符串[]args){
int[]num={1,2,3,3,4,4};
for(int x:num){
系统输出打印(x+“”);
}
System.out.println(“\n”+freq(num));
}
公共静态数组列表频率(int[]num){
ArrayList=新建ArrayList();
对于(int x=0;x
导入java.util.ArrayList;
公开课考试{
公共静态void main(字符串[]args){
int[]num={1,2,3,3,4,4};
for(int x:num){
系统输出打印(x+“”);
}
System.out.println(“\n”+freq(num));
}
静态类ValueCountPair{
公共价值对(最终内部价值)
{
值=val;
计数=2;
}
公共价值观;
公共整数计数;
公共字符串toString(){
返回“[”+值+”:“+计数+”];
}
}
公共静态数组列表频率(最终int[]num){
ArrayList=新建ArrayList();
ValueCountPair last=null;
对于(int x=0;x
由于您的数组已排序,您可以使用另一个数组,其中每个索引对应于此数字的点击量:

int[] count = new int[num[num.length - 1]];
然后可以为每个匹配增加此计数器的索引:

count[num[x] - 1] = count[num[x] - 1] + 1;
然而,这不会压缩您的表示,只是将其转换为另一种形式。由于您在计算之前不知道结果长度,因此不可能使用更紧凑的表示法,而不使用列表或更好的贴图,因为数组的大小必须在创建时已知。此解决方案仅适用于大于0的数字。对于其他范围,必须调整偏移

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