题目描述
思路:最小堆
好好领悟这个代码:
// 将nums数组所有元素插入小根堆中
for (int num : nums) {
heap.offer(num);
// 当小根堆的容量大于k时,就删除堆顶元素
if (heap.size() > k) heap.poll();
}
当heap.size() == k的时候,还是会再添加一个元素,此时堆内部会已经排好序,并且heap.size()此时为k+1,此时需要执行poll()操作,保证heap的大小为K。
方法一:
class KthLargest {
private PriorityQueue<Integer> heap;
private int k;
public KthLargest(int k, int[] nums) {
this.k = k;
this.heap = new PriorityQueue<>();
// 将nums数组所有元素插入小根堆中
for (int num : nums) {
heap.offer(num);
// 当小根堆的容量大于k时,就删除堆顶元素
if (heap.size() > k) heap.poll();
}
}
public int add(int val) {
heap.offer(val);
if (heap.size() > k) heap.poll();
return heap.peek();
}
}
/**
* Your KthLargest object will be instantiated and called as such:
* KthLargest obj = new KthLargest(k, nums);
* int param_1 = obj.add(val);
*/
标签:LeeCode703,元素,nums,int,KthLargest,heap,数据流,LeetCode,size
From: https://www.cnblogs.com/keyongkang/p/17903830.html