Top k Largest Numbers II

Data Stream, Priority Queue, Heap

Medium

Question

Implement a data structure, provide two interfaces:

  1. add(number). Add a new number in the data structure.

  2. topk(). Return the top k largest numbers in this data structure. k is 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?