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;
}
}