假设我读了一个整数流。相同的整数可能在流中出现多次。现在我想保留最常出现的N个整数的缓存。缓存按流元素的频率排序。
您将如何在Java中实现它?
答案 0 :(得分:3)
答案 1 :(得分:2)
答案 2 :(得分:2)
public class MyData implements Comparable<MyData>{
public int frequency = 0;
public Integer data;
@Override
public int compareTo(MyData that) {
return this.frequency - that.frequency;
}
}
将其存储在PriorityQueue
中答案 3 :(得分:1)
为int创建一个对象模型,在里面创建一个Count属性。创建一个扩展Vector集合的SortedVector集合。每次出现整数时,如果它不存在,则将其添加到向量中。否则,找到它,更新count属性+ = 1,然后在Vector中调用Collections.sort(this)。
答案 4 :(得分:1)
你知道数字的范围吗?如果是这样,使用数组可能是有意义的。例如,如果我知道数字的范围在0到10之间,我会创建一个大小为10的数组。此数组中的每个元素都会计算我看到给定数字的次数。然后,你只需要记住最常见的数字。
e.g。
array[10];
freq_index = -1;
freq_count = -1;
readVal(int n){
array[n]+=1;
if array[n] > freq_count
freq_index = n;
freq_count = array[n];
}
当然,如果数字的分布很稀疏,这种方法很糟糕。
我会尝试优先队列。