思路:小根堆
- 对于这种第k大数值的问题,我们一般用一个长度为k的小根堆来保存,这个堆的元素保存截止至目前为止最大的k个元素,所以第k大的自然是堆顶
- 至于如何向堆中添加分两种情况
- 如果堆没满(元素数目≤k)那就直接添加
- 如果堆满了,判断当前元素是否大于堆顶元素。如果大,那就弹出堆顶,把此元素放入;如果小,那就什么都不做
class KthLargest {
int size;
PriorityQueue<Integer> queue;
public KthLargest(int k, int[] nums) {
size = k;
queue = new PriorityQueue<>();
for (int num : nums) {
add(num);
}
}
public int add(int val) {
if (queue.size() < size)
queue.offer(val);
else if (val > queue.peek()) {
queue.poll();
queue.offer(val);
}
return queue.peek();
}
}