LeetCode第703题Kth Largest Element in a Stream
Kth Largest Element in a Stream
Kth Largest Element in a Stream寻找一个整数流中第K
大的元素,K
是固定的,整数流包含一个构造函数add
,每次往流中添加新元素时,就返回新的第K
大的元素。
Example:
int k = 3;
int[] arr = [4,5,8,2];
KthLargest kthLargest = new KthLargest(3, arr);
kthLargest.add(3); // returns 4
kthLargest.add(5); // returns 5
kthLargest.add(10); // returns 5
kthLargest.add(9); // returns 8
kthLargest.add(4); // returns 8
这道题可以使用优先队列PriorityQueue
来做,在Java
中优先队列默认通过二叉小顶堆实现。我们可以令这个优先队列的长度为K
,这个队列的头部就是整数流中第K
大的元素,每当新的元素进来时,我们就把新的元素和队列头部元素(也就是堆顶)进行比较,如果新的元素比较大,则纳入新的元素。优先队列会自动维护小顶堆的性质,保证队列头部元素始终是我们需要的第K
大的元素。
Solution
下面是Java
的代码:
class KthLargest { |
下面是Python
的代码:
class KthLargest: |
总结
第703题是简单题,学会利用已有的数据结构,加一点简单的逻辑,能做很多神奇的事,再也不要暴力循环了鸭。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WenQian Dong's Web!