703. 数据流中的第K大元素
难度:简单
题目描述
解题思路
这个跟TOP K问题差不多嘛,因为强调了是数据流中的元素,所以实时维护一个大小为k的小根堆比较合适。还是用优先队列来实现小根堆,要考虑num数组是空的情况,为了避免后面堆为空,加入一个最小元素
import java.util.PriorityQueue;
public class KthLargest {
PriorityQueue<Integer> minHead;
int k;
public KthLargest(int k, int[] nums) {
minHead = new PriorityQueue<>((a,b) -> a - b);
this.k = k;
if(nums.length == 0)
minHead.offer(Integer.MIN_VALUE);
for (int i = 0; i < nums.length; i++) {
add(i);
}
}
public int add(int val) {
if(minHead.size() < k) {
minHead.offer(val);
}
else if(val > minHead.peek()) {
minHead.poll();
minHead.offer(val);
}
return minHead.peek();
}
}