[路飞]_LeetCode_703. 数据流中的第 K 大元素

175 阅读1分钟

题目

设计一个找到数据流中第 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…

解题思路

  1. 维护一个升序队列,添加新元素时对队列进行升序排序
  2. 把第k大元素以前的元素出队列
  3. 返回第0个元素

2021-12-17 at 16.22.10.gif

代码实现

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]
}

如有错误欢迎指出,欢迎一起讨论!