Heap & Priority Queue (Куча)

Когда применять:

  • Найти K самых больших/маленьких элементов (Top K).
  • Слияние K отсортированных списков.
  • Медиана потока данных.
  • Планирование задач (всегда брать самую приоритетную).

Примечание: В JS нет встроенной PriorityQueue. На собеседованиях для K < N часто используют сортировку или QuickSelect. Для полноценного решения нужен класс MinHeap.


Top K Frequent Elements (Bucket Sort Approach)

Оптимальный способ для этой задачи за O(N), без кучи.

var topKFrequent = function(nums, k) {
  const count = new Map();
  // 1. Считаем частоты
  for (const n of nums) count.set(n, (count.get(n) || 0) + 1);
 
  // 2. Бакеты: index = frequency, value = array of numbers
  const freq = Array.from({length: nums.length + 1}, () => []);
  for (const [n, c] of count) freq[c].push(n);
 
  // 3. Собираем топ K с конца (самые частые)
  const res = [];
  for (let i = freq.length - 1; i > 0; i--) {
    for (const n of freq[i]) {
      res.push(n);
      if (res.length === k) return res;
    }
  }
};

Практика