Top k Largest Numbers II
Data Stream, Priority Queue, Heap
Medium
Question
Implement a data structure, provide two interfaces:
add(number). Add a new number in the data structure.
topk(). Return the topklargest numbers in this data structure.kis given when we create the data structure.Example
Example1
s = new Solution(3);
>> create a new data structure.
s.add(3)
s.add(10)
s.topk()
>> return [10, 3]
s.add(1000)
s.add(-99)
s.topk()
>> return [1000, 10, 3]
s.add(4)
s.topk()
>> return [1000, 10, 4]
s.add(100)
s.topk()
>> return [1000, 100, 10]Example2
Analysis
与top k问题1类似,不太一样的一点在于动态添加,使用min heap来实现,能够比较好地通过更新min heap来记录top k。
当添加的元素数目在1 ~ k时,直接插入这一元素到min heap中; 当添加的元素数目超出k时,对于新添加的元素,需要与min heap的根进行比较,如果比minheap.peek()大,那么便删除根,添加该新元素。
Solution
Min-Heap + iterator()
Last updated
Was this helpful?