CodingNeed.

Engineering practice · 30 MIN

Rank frequent events with a bounded heap

Choose a data structure according to the requested output size.

Count events, then keep the best k candidates. A bounded heap is useful when k is much smaller than the number of distinct events. Python heapq.nsmallest accepts a key function; negative frequency sorts higher counts first, and the word breaks ties. The implementation may choose sorting when k is large. The exercise’s result must be deterministic.

Treat the function as a small service: define a contract, maintain an invariant, and test the boundaries.

Read the example

from collections import Counter
print(Counter(["a", "b", "a"])["a"])
Check the expected output
2

Your challenge

Input {words:list[str],k:nonnegative integer}. Return up to k unique words by descending frequency, breaking ties alphabetically.

Solution cost: O(n + u log k) when 1 < k < u; O(n + u log u) when sorting all u unique words. String comparisons also depend on word length. time · O(u + k), excluding input. space

Common trap

Taking the first k items from Counter does not rank by frequency.

Further reading: Python heapq

Next lesson: Project · Parse a stream of event records →

Essential cookies keep your account signed in. Optional analytics is not configured on this site. Your choice does not affect access to lessons.

Read the Privacy Policy. You can change this choice in the footer.