ID | Title | Difficulty | |
---|---|---|---|
Loading... |
703. Kth Largest Element in a Stream
Easy
LeetCode
Tree, Design, Binary Search Tree, Heap (Priority Queue), Binary Tree, Data Stream
Problem
Design a class to find the $k^{th}$ largest element in a stream. Note that it is the $k^{th}$ largest element in the sorted order, not the $k^{th}$ 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) Returns the element representing the $k^{th}$ 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:
- $1 <= k <= 10^4$
- $0 <= nums.length <= 10^4$
- $-10^4 <= nums[i] <= 10^4$
- $-10^4 <= val <= 10^4$
- At most $10^4$ calls will be made to add.
- It is guaranteed that there will be at least k elements in the array when you search for the $k^{th}$ element.
Code
215. Kth Largest Element in an Array
注意题意
2,3,4,5,5,8
8 - 第1大
5 - 第2大
5 - 第3大
4 - 第4大
class KthLargest {
PriorityQueue<Integer> queue;
int k;
public KthLargest(int k, int[] nums) {
this.k = k;
// 维持k的大小 也就保证了queue中存放了前k个最大值
queue = new PriorityQueue<>();
for (int num : nums) {
queue.offer(num);
if (queue.size() > k) {
queue.poll();
}
}
}
public int add(int val) {
queue.offer(val);
if (queue.size() > k) {
queue.poll();
}
return queue.peek();
}
}
/**
* Your KthLargest object will be instantiated and called as such:
* KthLargest obj = new KthLargest(k, nums);
* int param_1 = obj.add(val);
*/
按 <- 键看上一题!
702. Search in a Sorted Array of Unknown Size
按 -> 键看下一题!
704. Binary Search