实现一个数据结构,提供下面两个接口
1.add(number) 添加一个元素
2.topk() 返回此数据结构中最大的k个数字。当我们创建数据结构时,k是给定的。
**用一个长度为k的优先队列来维护最大的k个数
通过Iterator it = minheap.iterator()的方式取出优先队列中的元素
再通过collections工具类 Collections.sort(list, Collections.reverseOrder())
将元素顺序颠倒
**
public class Solution {
/*
* @param k: An intege
*/
private int maxsize;
private Queue<Integer> minheap;
public Solution(int k) {
this.maxsize = k;
minheap = new PriorityQueue<>();
}
/*
* @param num: Number to be added
* @return: nothing
*/
public void add(int num) {
if(minheap.size() < maxsize){
minheap.offer(num);
}
else{
if(num > minheap.peek()){
minheap.poll();
minheap.offer(num);
}
}
return;
}
/*
* @return: Top k element
*/
public List<Integer> topk() {
List<Integer> list = new ArrayList<>();
Iterator it = minheap.iterator();
while(it.hasNext()){
list.add((Integer)it.next());
}
Collections.sort(list, Collections.reverseOrder());
return list;
}
}