TopK高频重复 算法题
Posted go大鸡腿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TopK高频重复 算法题相关的知识,希望对你有一定的参考价值。
前言
最近广州某大厂面,笔试也有算法,惊了~
题目就是找出2G数据里头,重复最多的前100个,虚拟机只有1G内存
解法
1.首先是分治法
因为内存不够,就1G1G来算咯,然后再将结果进行合并即可。
2.就是一个TopK 的问题,可以采用堆
3.重复次数最多
需要用map来记录key对应出现的次数有多少
代码
public static void main(String[] args) {
/*PriorityQueue<Integer> queue = new PriorityQueue();
queue.add(2);
queue.add(1);
queue.add(3);
queue.add(2);
while (queue.size()!=0){
System.out.println(queue.poll());
}*/
Comparator<Key> comparator = (o1, o2) -> o2.value-o1.value;
PriorityQueue<Key> queue1 = new PriorityQueue<>(comparator);
Map<String,Integer> map = new HashMap<>();
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("a");
while (list.size()!=0){
String value = list.remove(0);
Integer mValue = map.get(value);
if(null == mValue){
map.put(value,1);
}else {
map.put(value,mValue+1);
}
}
for(Map.Entry<String,Integer> entry:map.entrySet()){
System.out.println(entry.getKey()+" "+entry.getValue());
queue1.add(new Key(entry.getKey(),entry.getValue()));
}
System.out.println(queue1.poll());
}
@Data
static
class Key{
private String name;
private Integer value;
public Key(String name, Integer value) {
this.name = name;
this.value = value;
}
}
以上是关于TopK高频重复 算法题的主要内容,如果未能解决你的问题,请参考以下文章