解答
class KthLargest {
PriorityQueue<Integer> queue;
int length = 0;
public KthLargest(int k, int[] nums) {
queue = new PriorityQueue<>();
length = k;
for (int i : nums) {
add(i);
}
}
public int add(int val) {
queue.add(val);
while (queue.size() > length) {
queue.poll();
}
return queue.peek();
}
}
总结
利用堆的特性,默认为升序排列,堆顶为最小值。
将初始的数组加入到堆内,维持对象数量至多k
个。
当堆内的对象数量超出k
个时,将堆顶的对象取出,维持堆内对象的数量为k
。
题目要求第k
大的对象,依据上述思路,实际上可以转换为堆内对象数量为k
,第k
大的对象,实际上指的是堆顶的对象。