Back to all solutions

#703 - Kth Largest Element in a Stream

Problem Description

You are part of a university admissions office and need to keep track of the kth highest test score from applicants in real-time. This helps to determine cut-off marks for interviews and admissions dynamically as new applicants submit their scores.

You are tasked to implement a class which, for a given integer k, maintains a stream of test scores and continuously returns the kth highest test score after a new score has been submitted.

More specifically, we are looking for the kth highest score in the sorted list of all scores.

Implement the KthLargest class:

  • KthLargest(int k, int[] nums) Initializes the object with the integer k and the stream of test scores nums.
  • int add(int val) Adds a new test score val to the stream and returns the element representing the kth largest element in the pool of test scores so far.

Solution

/**
 * @param {number} k
 * @param {number[]} nums
 */
var KthLargest = function(k, nums) {
  this.main = new MinPriorityQueue();
  this.k = k;

  nums.forEach(n => this.main.enqueue(n));

  while (this.main.size() > k) {
    this.main.dequeue().element;
  }
};

/**
 * @param {number} val
 * @return {number}
 */
KthLargest.prototype.add = function(val) {
  this.main.enqueue(val);

  if (this.main.size() > this.k) {
    this.main.dequeue().element;
  }

  return this.main.front().element;
};