[LeetCode] LeeCode703. 数据流中的第K大元素

发布时间 2023-12-15 17:26:51作者: Ac_c0mpany丶

题目描述

思路:最小堆

好好领悟这个代码:

// 将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);
 */