İçeriğe atla
ΣDSA Patterns
Menü
Dil

Kalıp #13

Heap ve Top K

Temel

Tekrarlayan extract-min/max veya akış altında K en iyiyi koru.

Ne zaman kullanılır

Her seferinde tam sıralamadan en küçük, en büyük veya K en sık eleman gerektiğinde.

Tanıma ipuçları

  • K. en büyük / top K sık
  • K sıralı listeyi birleştir
  • Akıştan medyan (iki heap)

Yaygın tuzaklar

  • Top-K için min-heap vs max-heap karışıklığı
  • (freq, key) çifti gerekirken yalnızca değer saklamak
  • O(n log k) heap yeterken O(n log n) sıralama

90 saniyelik tanıma egzersizi

Hangisi en iyi uyuyor?

  • K. en büyük / top K sık
  • K sıralı listeyi birleştir
  • Akıştan medyan (iki heap)

Interactive

Zihinsel model

Değişmezin tam adım adım anlatımı. Duraklat, noktalara tıkla veya ← → kullan. Her adımı kendi cümlelerinle anlatmayı hedefle.

Adım 1 / 8
1
1
1
2
2
3
map132231

K = 2

Top K frequent. Count frequencies first.

Nasıl düşünülür

Heap ilgi sınırını tutar. Top K en büyük için boyut K min-heap güncel kazananları saklar; kök en zayıf kazanandır. Akışlarda iki heap alt/üst yarıyı dengeleyerek medyan verir.

Şablon şekilleri

Şekil Temel hamle Notlar
Top K Boyut K min-heap Yeni daha iyiyse kökü at
K-yollu birleştirme Başların min-heap’i Aynı listeden sonrakini push
Medyan Max-heap + min-heap Boyutları dengele

Karmaşıklık temeli

Top-K için tipik O(n log k); ekleme/pop O(log n). Alan O(k) veya O(n).

Şablondan probleme

  1. Netleştir: K en büyük, K en küçük veya K sık mı?
  2. Kökün atmaya hazır olduğun eleman olacağı heap yönelimini seç.
  3. Elemanları işle; uygunsa heap boyutu ≤ K kalsın.
  4. Heap’i cevap formatına çıkar veya dönüştür.

Şablon

TypeScript, Python ve C#’te aynı iskelet. Değişmezi uyarla; yapıyı koru.

Heap ve Top K · Şablon
/** Heap / top-K template: kth largest via min-heap of size k. */
export function findKthLargest(nums: number[], k: number): number {
  const heap: number[] = [];
  for (const x of nums) {
    heap.push(x);
    heap.sort((a, b) => a - b);
    if (heap.length > k) heap.shift();
  }
  return heap[0]!;
}
/** Heap / top-K template: kth largest via min-heap of size k. */
export function findKthLargest(nums: number[], k: number): number {
  const heap: number[] = [];
  for (const x of nums) {
    heap.push(x);
    heap.sort((a, b) => a - b);
    if (heap.length > k) heap.shift();
  }
  return heap[0]!;
}