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-heappriority_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(intx:nums){pq.push(x);if((int)pq.size()>k)pq.pop();}// pq.top() = Kth largest// Custom comparator (min-heap by first element of pair)autocmp=[](pair<int,int>&a,pair<int,int>&b){returna.first>b.first;};priority_queue<pair<int,int>,vector<pair<int,int>>,decltype(cmp)>pq(cmp);