---
round: 1
ticket_no: 2
source_no: 24
slug: top-k-frequent-words
topic: Heap / Hash
difficulty: Medium
leetcode_id: 692
attempted: true
score: 2
verdict: partial
reviewed_at: 2026-09-12
---

# Билет 02 — Top K Frequent Words

## Условие (как предъявлено)

Дан массив строк `words` и число `k`. Вернуть `k` самых частых слов, упорядоченных по убыванию частоты; при равной частоте — лексикографически.

```
Input:  words = ["i","love","leetcode","i","love","coding"], k = 2  →  ["i","love"]
```

Constraints: `1 <= n <= 500`. Follow-up: `O(n log k)` по времени.

## Ответ

> Здесь идея заключается в том, что мы проходим по всем словам, по всем элементам и накапливаем это в хэшмапе. Значит, где у нас ключ — это строка, встречи встретившиеся, а валью — это число вхождений. То есть плюс один делаем, плюс один. В конце мы можем отсортировать элементы этого хэшмапа по как раз количеству и второй признак — это собственно сама лексическое значение этого слова и К-элементов. Есть улучшение этого алгоритма, когда вместо сортировки всего мы проходимся по хэшмапу и, значит, заполняем кучу размера К, вот в котором, значит, в котором на вершине находится худший элемент с точки зрения сортировки. Вот и мы, если видим, что новый элемент, который мы туда добавляем, он лучше, тогда мы его вставляем, а вершину удаляем оттуда. Таким образом, у нас в куче всегда К-элементов лучшие, которые у нас встретились.

## Разбор

**Что верно:** hash частот, сортировка пар по убыванию частоты и лексикографически, взять первые k; плюс верный апгрейд — min-heap размера k, где на вершине «худший» элемент, с заменой вершины.

**Что упущено и ошибки:** не названа сложность: O(n log n) у сортировки против O(n log k) у кучи; не сказано, что «худший» на вершине — это min-heap именно по паре (частота, слово) с разворотом лексикографики; в Ruby кучи в stdlib нет, нужна ручная реализация; граничные случаи (k больше числа уникальных слов, n = 1).

**Эталонная идея:** tally → сортировка по [-count, word] → первые k. Вариант O(n log k) — min-heap размера k по (count, word).

**Сложность:** время O(n log n) сортировкой или O(n log k) кучей, память O(n)

**Критерии:** идея ✅ · структура данных ✅ · сложность ❌ · граничные случаи ⚠️


**Разбор задачи:** [`../../algo-solutions/02-extra/03-heap-hash/24-top-k-frequent-words.md`](../../algo-solutions/02-extra/03-heap-hash/24-top-k-frequent-words.md)
