Heap
Kth Largest Element in Unsorted Array - Heapify vs insert
-> sorting: nlog(n) & o(1) space
-> Max heap: maximum value on top
- create a max heap by heapifying - O(n)
- No need to do one by one insert as it will take n.log(n)
- pop for k times - k.log(N)
- Total : N + k.log(N)
-> Min heap: min value on top
- create a min heap of size k
- first push k elements (one by one) => k.log(k)
- then after for remaining n-k -> pop and then push => (n-k).log(k)
- total (Essentially we push every element in heap) - n.log(k)
Comparison of Approaches
- Sorting Approach
- Sort the array and pick the Kth largest element.
- Time Complexity: O(NlogN)
- Space Complexity: O(1) if sorting is done in place.
- Min Heap Approach
- Use a min heap (priority queue) of size K.
- Iterate through the array, maintaining only the top K largest elements.
- The root of the min heap will be the Kth largest element.
- Time Complexity: O(NlogK)
- Building the heap takes O(KlogK)
- Inserting N−K elements and maintaining heap property takes O((N−K)logK)
- Space Complexity: O(K) (since we store only K elements)
Conclusion
- For large N and small K → Min heap is better.
- For small N or if K is close to N → Sorting is fine.
- If modifications to the array are not allowed → Min heap is useful.
