Learning Outcome
After this lesson, you should be able to use a min-heap as a fixed-size filter for the k largest values.
Problem Statement
Given an unsorted array and integer k, return the kth largest element.
| Input | Output | Why |
|---|---|---|
nums = [3,2,1,5,6,4], k = 2 | 5 | The sorted descending order is 6,5,4,3,2,1, so the second largest is 5. |
Brute Force Approach
Sort the full array and read index n - k. This is simple but sorts more than needed.
Optimized Approach
Maintain a min-heap of size k. After every push, remove the smallest if the heap is too large, so the heap keeps the k largest values.
Exact Pseudocode
heap = empty min heap
for x in nums:
push x into heap
if heap size is greater than k:
pop smallest
return heap top
Reference Code
import heapq
class Solution:
def findKthLargest(self, nums, k):
heap = []
for x in nums:
heapq.heappush(heap, x)
if len(heap) > k:
heapq.heappop(heap)
return heap[0]Sample Dry Run
| Step | State | Result |
|---|---|---|
| Push 3,2 | heap keeps [2,3] | size is k |
| Push 1 | pop 1 | heap still has 2 largest seen |
| Push 5,6,4 | small values are popped | heap keeps [5,6] |
| Return top | top is 5 | 2nd largest |
Complexity
| Measure | Value | Reason |
|---|---|---|
| Time | O(n log k) | Each number performs heap work bounded by heap size k. |
| Space | O(k) | The heap stores at most k numbers. |
Edge Cases
- k = 1 returns the maximum value.
- Duplicates count as separate elements.
- k is assumed valid in the standard problem.
Interview Checklist
- Use a min-heap, not a max-heap, for size-k filtering.
- Pop only when heap size exceeds k.
- Return heap top after all numbers are processed.
FAQs
Why does the heap top become kth largest?The heap stores the k largest values seen so far, so the smallest among them is the kth largest.
Why not sort?Sorting is fine but costs O(n log n), while the heap only pays log k per item.
What is the core pattern?Size-k min-heap.
Discussion
0 comments
Ask a question or share what stood out to you.