class KthLargest {
//对于这种维护动态数据的最大或者最小k个数我们选用的是堆结构它的插入和删除的时间复杂度都是O(logn),取堆顶元素的时间复杂度是O(1)
//创建对结构和维护对结构的大小
private PriorityQueue<Integer> heap;
private int size;
public KthLargest(int k, int[] nums) {
//初始化堆,并设置大小
heap = new PriorityQueue<>();
size = k;
//对于已经读取的元素入堆
for(int num : nums){
add(num);
}
}
public int add(int val) {
//对于每一个要插入的数据首先判断堆结构是否满,未满直接插入
if(heap.size() < size){
heap.offer(val);
}else if(val > heap.peek()){
//如果对结构已满,所要插入的数比小顶堆的堆顶元素还要小,它就不具备入堆的资格,如果比堆顶元素大,那么久删除对顶元素,本元素入堆
heap.poll();
heap.offer(val);
}
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);
*/
12-30
396
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)