算是利用Java官方的优先级队列解决TopK问题吧
k来确定优先级队列的最大容量,然后传入的nums数组表示待加入的数据流,再通过add方法来限制queue存储的元素,最后add方法返回最小堆的堆顶元素。
代码实现
class KthLargest {
private PriorityQueue<Integer> queue;
private int limit;
public KthLargest(int k, int[] nums) {
limit = k;
queue = new PriorityQueue<>(k);
for (int num : nums) {
add(num);
}
}
public int add(int val) {
if (queue.size() < limit) {
queue.add(val);
} else if (val > queue.peek()) {
queue.poll();
queue.add(val);
}
return queue.peek();
}
}