Easy
,Tree
,Heap
703. Kth Largest Element in a Stream
Design a class to find the kth largest element in a stream. Note that it is the kth largest element in the sorted order, not the kth distinct element.
Implement KthLargest
class:
KthLargest(int k, int[] nums)
Initializes the object with the integer k
and the stream of integers nums
.int add(int val)
Appends the integer val
to the stream and returns the element representing the kth largest element in the stream.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
Constraints:
k
<= 104nums.length
<= 104nums[i]
<= 104val
<= 104add
.k
elements in the array when you search for the kth element.
class KthLargest:
def __init__(self, k: int, nums: List[int]):
self.k = k
self.heap = []
for num in nums:
self.add(num)
def add(self, val: int) -> int:
if len(self.heap) < self.k:
heapq.heappush(self.heap, val)
elif val > self.heap[0]:
heapq.heapreplace(self.heap, val)
return self.heap[0]
Yen-Chi ChenTue, May 23, 2023
class KthLargest:
def __init__(self, k: int, nums: List[int]):
self.k = k
self.heap = nums
heapq.heapify(self.heap)
while len(self.heap) > self.k:
heapq.heappop(self.heap)
def add(self, val: int) -> int:
heapq.heappush(self.heap, val)
if len(self.heap) > self.k:
heapq.heappop(self.heap)
return self.heap[0]
Ron ChenTue, May 23, 2023
class KthLargest {
constructor(k, nums) {
this.k = k;
this.nums = nums;
}
add(val) {
this.nums.push(val);
this.nums.sort((a, b) => b - a);
return this.nums[this.k - 1];
}
}
用sort也會過ㄏㄏ
MarsgoatTue, May 23, 2023
class KthLargest {
constructor(k, nums) {
this.k = k;
this.minHeap = new MinHeap();
for (const num of nums) {
this.add(num);
}
}
add(val) {
this.minHeap.push(val);
if (this.minHeap.size() > this.k) {
this.minHeap.pop();
}
return this.minHeap.top();
}
}
minHeap就不貼了,我直接讓chatGPT把我之前的maxHeap直接改寫成minHeap
MarsgoatTue, May 23, 2023
class KthLargest {
public:
multiset<int> bst;
int k;
vector<int> nums;
KthLargest(int k, vector<int>& nums) {
this->k = k;
for (int x : nums) {
bst.insert(x);
}
}
int add(int val) {
bst.insert(val);
auto it = bst.end();
advance(it, -k);
return *it;
}
};
Jerry WuTrue, May23, 2023