🏆 Top K Elements

Heap / Priority Queue for Efficient Top K

Day 4/6 Pattern: Heap

📖 Pattern Overview

🎯 When to Use

  • Find Kth largest/smallest element
  • Top K frequent elements
  • K closest points
  • Merge K sorted lists

⚡ Complexity

  • Time: O(n log k)
  • Space: O(k)
  • vs Sort: O(n log n)
  • Why Better: Heap size = k, not n!

🔑 How It Works

  • Min-Heap: For K largest
  • Max-Heap: For K smallest
  • Size K: Maintain heap of size K
  • Result: Heap contains top K

🎯 Select Problem

Kth Largest Element

3
Normal
Array Size: 0
Heap Size: 0
Operations: 0
Result: -

Current Step:

Click "Start" to begin the algorithm

🎨 Custom Input

📚 LeetCode Problems

215. Kth Largest Element

Medium

Find the kth largest element in an unsorted array.

Solve on LeetCode →

347. Top K Frequent Elements

Medium

Return K most frequent elements.

Solve on LeetCode →

973. K Closest Points to Origin

Medium

Find K points closest to origin (0,0).

Solve on LeetCode →

295. Find Median from Stream

Hard

Use two heaps to maintain running median.

Solve on LeetCode →

703. Kth Largest Element in Stream

Easy

Design class to find Kth largest in stream.

Solve on LeetCode →

23. Merge K Sorted Lists

Hard

Merge K sorted linked lists using min-heap.

Solve on LeetCode →

🧠 Algorithm Deep Dive

Why Heap? The Key Insight

Sorting approach: O(n log n) - sorts all n elements

Heap approach: O(n log k) - maintains only k elements!

When k << n, this is MUCH faster. Example: Find top 10 from 1 million items.

// Kth Largest Element
function findKthLargest(nums, k) {
    // Use min-heap of size k
    const minHeap = new MinHeap();
    
    for (let num of nums) {
        minHeap.push(num);
        
        // Keep heap size = k
        if (minHeap.size() > k) {
            minHeap.pop(); // Remove smallest
        }
    }
    
    // Root of min-heap = kth largest
    return minHeap.peek();
}

Min-Heap vs Max-Heap: When to Use

  • K Largest elements: Use Min-Heap (remove smallest when size > k)
  • K Smallest elements: Use Max-Heap (remove largest when size > k)
  • Why counterintuitive? We remove opposite elements to keep the K we want!

Top K Frequent Elements

function topKFrequent(nums, k) {
    // Step 1: Count frequencies
    const freq = {};
    for (let num of nums) {
        freq[num] = (freq[num] || 0) + 1;
    }
    
    // Step 2: Use min-heap of size k
    const minHeap = new MinHeap((a, b) => a[1] - b[1]);
    
    for (let [num, count] of Object.entries(freq)) {
        minHeap.push([num, count]);
        if (minHeap.size() > k) {
            minHeap.pop();
        }
    }
    
    // Step 3: Extract elements
    return minHeap.toArray().map(x => x[0]);
}

Real-World Applications

  • Leaderboards: Gaming (top 100 players), sports rankings
  • Recommendation Systems: Netflix top 10, YouTube trending
  • Search Engines: Google top search results
  • E-commerce: Amazon best sellers, trending products
  • OS Task Scheduling: Priority queues for processes
  • Network Routing: Shortest path algorithms (Dijkstra)