1 min read
ποΈ Heaps (Priority Queues)
Min-heap: parent β€ children. O(log n) push/pop. O(1) peek. C++ priority_queue defaults to max-heap β use greater<int> for min-heap.
Core Patterns
| Pattern | Approach | Example |
|---|---|---|
| Top K largest | Min-heap of size K | Keep K largest, peek = Kth |
| Top K smallest | Max-heap of size K | Keep K smallest |
| K-way merge | Push (val, list, idx) | Merge K sorted lists |
| Running median | Max-heap (lower) + min-heap (upper) | Median of data stream |
Templates
// Min-heap
priority_queue<int, vector<int>, greater<int>> minH;
// Top-K largest elements (min-heap of size K)
priority_queue<int, vector<int>, greater<int>> pq;
for (int x : nums) {
pq.push(x);
if ((int)pq.size() > k) pq.pop();
}
// pq.top() = Kth largest
// Custom comparator (min-heap by first element of pair)
auto cmp = [](pair<int,int>& a, pair<int,int>& b){ return a.first > b.first; };
priority_queue<pair<int,int>, vector<pair<int,int>>, decltype(cmp)> pq(cmp);
Complexity
| Operation | Time |
|---|---|
| Push / Pop | O(log n) |
| Peek (top) | O(1) |
| Build heap from array | O(n) |