我有一个数组并且已经对其进行了排序。我希望能够找到哪些数字重复。接下来,我希望能够计算这些数字重复的次数。例如,在列表 [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/