Skip to content
On this page

703. 数据流中的第 K 大元素

原题链接:LeetCode 703. 数据流中的第 K 大元素

题目描述

设计一个找到数据流中第 k 大元素的类(class)。注意是排序后的第 k 大元素,不是第 k 个不同的元素。

请实现 KthLargest 类:

  • KthLargest(int k, int[] nums) 使用整数 k 和整数流 nums 初始化对象。

  • int add(int val)val 插入数据流 nums 后,返回当前数据流中第 k 大的元素。

示例 1:

  • 输入: ["KthLargest", "add", "add", "add", "add", "add"][[3, [4, 5, 8, 2]], [3], [5], [10], [9], [4]]

  • 输出: [null, 4, 5, 5, 8, 8]

  • 解释: KthLargest kthLargest = new KthLargest(3, [4, 5, 8, 2]); kthLargest.add(3); // 返回 4 kthLargest.add(5); // 返回 5 kthLargest.add(10); // 返回 5 kthLargest.add(9); // 返回 8 kthLargest.add(4); // 返回 8

示例 2:

  • 输入: ["KthLargest", "add", "add", "add", "add"][[4, [7, 7, 7, 7, 8, 3]], [2], [10], [9], [9]]

输出:[null, 7, 7, 7, 8]

  • 解释: KthLargest kthLargest = new KthLargest(4, [7, 7, 7, 7, 8, 3]); kthLargest.add(2); // 返回 7 kthLargest.add(10); // 返回 7 kthLargest.add(9); // 返回 7 kthLargest.add(9); // 返回 8

提示:

  • 0 <= nums.length <= 104

  • 1 <= k <= nums.length + 1

    -104 <= nums[i] <= 104 -104 <= val <= 104

  • 最多调用 add 方法 104 次

难度: Easy


题解代码

javascript
/**
 * @param {number} k
 * @param {number[]} nums
 */
var KthLargest = function(k, nums) {
  this.k = k
  this.heap = new MinPriorityQueue({ 
    compare: (a, b) => a - b
  });
  for (let i = 0; i < nums.length; i++) {
    this.add(nums[i])
  }
};

/** 
 * @param {number} val
 * @return {number}
 */
KthLargest.prototype.add = function(val) {
  this.heap.enqueue(val)
  if (this.heap.size() > this.k) {
    this.heap.dequeue()
  }
  return this.heap.front()
};



/**
 * Your KthLargest object will be instantiated and called as such:
 * var obj = new KthLargest(k, nums)
 * var param_1 = obj.add(val)
 */

技术文档集合