我正在尝试查找所有最频繁出现的数字。例如,如果最高出现频率为5,则需要找到所有在数组中出现5次的数字。
让我们考虑以下数组示例:
1 8 7 8 9 2 1 9 6 4 3 5
在这里,最频繁出现的数字是8、1和9,它们的出现频率最高为2。我的期望输出结果如下:
在我的项目中,我试图找出最频繁的数字和最不频繁的数字。这里我只想要最频繁的数字。
我已经生成了1000个随机数,与我的项目场景类似,并计算了独特数字及其出现次数。
让我们考虑以下数组示例:
1 8 7 8 9 2 1 9 6 4 3 5
在这里,最频繁出现的数字是8、1和9,它们的出现频率最高为2。我的期望输出结果如下:
8 => 2
1 => 2
9 => 2
在我的项目中,我试图找出最频繁的数字和最不频繁的数字。这里我只想要最频繁的数字。
我已经生成了1000个随机数,与我的项目场景类似,并计算了独特数字及其出现次数。
int n=100;
int N=1000;
int data[] = new int[N];
Set<Integer> set = new HashSet<Integer>();
Random random = new Random();
for(int i=0;i<N;i++){
int number = random.nextInt(n);
data[i] = number;
set.add(number);
}
int frequency[] = new int[set.size()];
Integer[] distinct = set.toArray(new Integer[set.size()]);
for (int j=0;j<set.size();j++){
int count=0;
for(int k=0;k<N;k++){
if(distinct[j]==data[k]){
count = count+1;
}
}
frequency[j] = count;
}
计算每个数字的频率后,我使用这里提供的优化答案来计算具有最高频率的数字。
int max = Integer.MIN_VALUE;
List<Integer> vals = new ArrayList<>();
for (int q=0; q < frequency.length; ++q) {
if (frequency[q] == max) {
vals.add(q);
}
else if (frequency[q] > max) {
vals.clear();
vals.add(q);
max = frequency[q];
}
}
for(int num : vals){
System.out.println(distinct[num]+" => "+frequency[num]);
}
在第一段代码中,循环使整个过程变得更慢。这只是庞大代码和示例测试用例的一部分。
我希望能够加快处理速度,因为在实际情况下数组中可能会有很多元素。
是否有优化这些循环的方法? 或者 其他获取结果的方式?
非常感谢任何形式的帮助。