Kth Largest Element
Bir dizideki k. en büyük elemanı bul. O(n log k) heap ile.
Top K Frequent Elements
Bir dizide en sık geçen k elemanı bul. Sonuç listesi herhangi bir sırada olabilir. Counter + heapq.nlargest veya bucket sort ile O(n log k).
Merge K Sorted Lists
K tane sıralı listeyi tek sıralı liste olarak birleştir. List[list[int]] input olarak gelir.
Find Median from Data Stream
Veri akışından medyanı bul. İki heap: max-heap (küçük yarı) + min-heap (büyük yarı).
Task Scheduler
Aynı task arasında en az n boşluk olmalı. Minimum süre?
K Closest Points to Origin
Orijine (0,0) Öklid uzaklığına göre en yakın K noktayı bul. Uzaklık = sqrt(x^2 + y^2). Karesi ile karşılaştırma yeterli. Heap veya sort ile O(n log n).
Last Stone Weight
İki en ağır taşı çarpıştır, küçük olan kaybolur. Son kalan taşın ağırlığı?
Smallest Number Range
K sıralı dizide hepsinden en az 1 eleman içeren en küçük aralık [a,b]?
Python Heap Nedir?
Heap / Priority Queue Nedir?
Heap, her düğümün çocuklarından büyük (veya küçük) olduğu özel bir binary tree veri yapısıdır. En yaygın kullanımı priority queue: en yüksek (veya en düşük) öncelikli elemanın O(1) veya O(log n) sürede alınması. Python'da heapq modülü min-heap implementasyonu sağlar; max-heap için değerlerin negatifi kullanılır.
Mülakatlarda en sık sorulan heap soruları: K'th largest/smallest elemanı bul, top K frequent, median maintenance (veri akışından medyan tut), Dijkstra'nın kısa yol algoritması. Heap'in asıl gücü, sıralanmamış bir veri yapısından en iyi/en kötü elemanı sürekli çekme işleminde ortaya çıkar.
import heapq
# Min-heap oluşturma
heap = []
heapq.heappush(heap, 5)
heapq.heappush(heap, 1)
heapq.heappush(heap, 3)
heapq.heappush(heap, 7)
# En küçük elemanı çek (O(log n))
print(heapq.heappop(heap)) # 1
print(heap) # [3, 5, 7]
# Max-heap trick: negatif değerler
maxh = []
heapq.heappush(maxh, -5)
heapq.heappush(maxh, -1)
heapq.heappush(maxh, -3)
print(-heapq.heappop(maxh)) # 5
# n largest / n smallest
nums = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3]
print(heapq.nlargest(3, nums)) # [9, 6, 5]
print(heapq.nsmallest(3, nums)) # [1, 1, 2]Heap Ne Zaman Kullanılır?
Heap, en iyi/en kötü elemanı sürekli çekmen gereken durumlarda idealdir. Sıralı erişim gerekmiyorsa (O(1) peek + O(log n) pop), Dijkstra ve A* gibi graf algoritmalarında, median maintenance (iki heap'le çalışan trick), task scheduler (en yüksek öncelikli görev önce), ve K'th largest problemlerinde kullanılır. Sıralı iterasyon gerekirse heap yerine sorted set veya balanced BST tercih edilir.
heapq doğrudan desteklemez. Negatif değer trick'ini unutma veya sortedcontainers gibi üçüncü parti kütüphane kullan.- K'th largest/smallest eleman: O(n log k)
- Top K frequent: O(n log k)
- Median maintenance: iki heap ile O(1) ekleme, O(1) medyan
- Dijkstra/A* kısa yol algoritması: öncelik kuyruğu
- Task scheduler: en öncelikli işi önce al
- Stream medyan: veri akışından medyanı tut
İlgili Kategoriler
Veri Yapıları
Tüm veri yapıları: stack, queue, tree, linked list.
Python Stack
Stack veri yapısı için 5+ soru.
Python Queue
Queue veri yapısı için 5+ soru.
Python Algoritma Soruları
Sıralama, arama, DP, graf.
Tüm Mülakat Kategorileri
9 kategori, 132 soru.
Python Eğitimi
Sıfırdan ileri seviyeye Türkçe dersler.