您的位置:首页 > 运维架构

TopK问题

2017-08-08 23:13 134 查看
1、1000万video用id(long)标识,每个video有一个分数,取出其中分数高的前1000个。

public class Video {
long id;
double score;
}

public class Solution {
public Video[] getTopK(ArrayList<Video> data, int k){
Queue<Video> pq = new PriorityQuery<>(k, new Comparator<Video>() {
public int compare(Video e1, Video e2) {
return e1.score - e2.score;
}});
for(Video v : data) {
if(pq.size() < k) {
pq.add(v)
}
else {
if(v.score > pq.peek()) {
pq.poll();
pq.add(v);
}
}
}
Video[] tmp = new Video[pq.size()];
int index = pq.size() - 1;
while(!pq.isEmpty()) {
tmp[index] = pq.peek();
index--;
}
return tmp;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  TopK