Appearance
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)
*/