题目描述
设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。
你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中的初始元素。每次调用 KthLargest.add,返回当前数据流中第K大的元素。
说明:
你可以假设 nums 的长度≥ k-1 且k ≥ 1。
示例
1 | int k = 3; |
解答
1 | public class KthLargest { |
该方案维护了一个容量为K的优先队列(小顶堆),基于堆的特性顶部元素即为我们需要的第K大元素,因此获取的时间复杂度仅为O(1);而每次有大于堆顶元素的元素就加入到队列中,并重新使堆平衡需要花费O(logk)的复杂度,相较于K个元素的全排序来说快很多。