Repository navigation
Expand file tree
/
Copy pathKthLargestEleInStream.java
More file actions
44 lines (38 loc) · 1.67 KB
/
Copy pathKthLargestEleInStream.java
File metadata and controls
44 lines (38 loc) · 1.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/*
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.
Example 1:
Input:
["KthLargest", "add", "add", "add", "add", "add"]
[[3, [4, 5, 8, 2]], [3], [5], [10], [9], [4]]
Output: [null, 4, 5, 5, 8, 8]
Explanation:
KthLargest kthLargest = new KthLargest(3, [4, 5, 8, 2]);
kthLargest.add(3); // return 4
kthLargest.add(5); // return 5
kthLargest.add(10); // return 5
kthLargest.add(9); // return 8
kthLargest.add(4); // return 8
*/
class KthLargest {
PriorityQueue<Integer> minPQ;
int k;
public KthLargest(int k, int[] nums) {
this.k = k;
minPQ = new PriorityQueue<>();
for(int num : nums){
minPQ.offer(num);
if(minPQ.size() > k)
minPQ.poll(); //so that kth largest element is always at root
}
}
public int add(int val) {
minPQ.offer(val);
if(minPQ.size() > k)
minPQ.poll();
return minPQ.peek();
}
}