LeetCode-703-数据流中的第 K 大元素

LeetCode-703-数据流中的第 K 大元素_第1张图片

LeetCode-703-数据流中的第 K 大元素_第2张图片

/**
* 通过使用只保存k个数字的小根堆
* 每次只放入最大的k个数, 那么根节点就是第k大的数
*/
class KthLargest {
     
    int k;
    List<Integer> nums;
    PriorityQueue<Integer> kNum;
    public KthLargest(int k, int[] nums) {
     
        this.k = k;
        this.nums = new LinkedList<>();
        this.kNum = new PriorityQueue<>();
        for (int i = 0; i < nums.length; i++) {
     
            this.nums.add(nums[i]);
            kNum.offer(nums[i]);
            if (i >= k && !kNum.isEmpty()) {
     
                kNum.poll();
            }
        }
    }
    public int add(int val) {
     
        kNum.add(val);
        if (!kNum.isEmpty() && kNum.size() > k) {
     
            kNum.poll();
        }
        return kNum.size() == k ? kNum.peek() : null;
    }
}
/**
 * Your KthLargest object will be instantiated and called as such:
 * KthLargest obj = new KthLargest(k, nums);
 * int param_1 = obj.add(val);
 */

你可能感兴趣的:(算法,leetcode)