题目
设计一个找到数据流中第 k 大元素的类(class)。注意是排序后的第 k 大元素,不是第 k 个不同的元素。
请实现 KthLargest 类:
KthLargest(int k, int[] nums) 使用整数 k 和整数流 nums 初始化对象。 int add(int val) 将 val 插入数据流 nums 后,返回当前数据流中第 k 大的元素。
来源:力扣(LeetCode)leetcode-cn.com/problems/kt…
解题思路
- 维护一个升序队列,添加新元素时对队列进行升序排序
- 把第k大元素以前的元素出队列
- 返回第0个元素
代码实现
var KthLargest = function (k, nums) {
this.k = k
this.nums = nums
}
/**
* @param {number} val
* @return {number}
*/
KthLargest.prototype.add = function (val) {
//先添加再排序
this.nums.push(val)
this.nums.sort((a, b) => a - b)
//把第k个以前的元素去掉
while(this.nums.length > this.k) {
this.nums.shift()
}
return this.nums[0]
}
如有错误欢迎指出,欢迎一起讨论!