Top K Largest Numbers

Question II (LI.545arrow-up-right)

Implement a data structure that supports the following operations: 1. add(number) add the new number 2. topk() returns a list of top k numbers

Example

ds = new MyDS(3);
ds.add(3)
ds.add(10)
ds.topk()
>> return [10, 3]
ds.add(1000)
ds.add(-99)
s.topk()
>> return [1000, 10, 3]
ds.add(4)
ds.topk()
>> return [1000, 10, 4]

Approach

We want k largest so maintain a min heap (polling out the min) of size k.

Code

Complexity

Time add(number) takes O(k) topk() takes O(klgk) (can be O(k) if not in sorted order)

Given an unsorted integer array, return the top k largest numbers.

Example

Simple Heap

Time O(nlgk) Space O(k)

Quick Select

O(logn) to find kth largest then O(n) to find the rest or O(nlogk) to sort the rest.

Last updated