Why do we need a heap when we already have a sorted array?
A heap allows efficient insertion and deletion of elements while maintaining order, unlike a sorted array which is slow to update because it requires shifting elements.
Click to reveal answer
beginner
What operation is slow in a sorted array but fast in a heap?
Insertion and deletion are slow in a sorted array (O(n)) because elements must be shifted, but fast in a heap (O(log n)) due to its tree structure.
Click to reveal answer
intermediate
How does a heap maintain order differently from a sorted array?
A heap maintains a partial order where the parent node is always greater (max-heap) or smaller (min-heap) than its children, allowing quick access to the top element without full sorting.
Click to reveal answer
beginner
What is the time complexity of finding the minimum or maximum element in a sorted array vs a heap?
In a sorted array, finding min or max is O(1) because elements are ordered. In a heap, finding min or max is O(1) only for the root element (max in max-heap or min in min-heap). For the opposite extreme, it is O(n).
Click to reveal answer
intermediate
Why is a heap preferred for priority queue implementations over a sorted array?
Because heaps allow fast insertion and removal of the highest priority element (both O(log n)), while sorted arrays require O(n) for insertion and deletion.
Click to reveal answer
Which operation is inefficient in a sorted array compared to a heap?
AAccessing the minimum element
BInsertion of a new element
CAccessing the maximum element
DTraversing all elements
✗ Incorrect
Insertion in a sorted array requires shifting elements, making it O(n), while in a heap it is O(log n).
What is the time complexity of deleting the top element in a heap?
AO(1)
BO(n log n)
CO(n)
DO(log n)
✗ Incorrect
Deleting the top element in a heap requires reheapifying, which takes O(log n) time.
Why can't a sorted array efficiently support dynamic priority queue operations?
ABecause it uses too much memory
BBecause it does not store elements in order
CBecause insertion and deletion require shifting elements
DBecause it cannot find the max element
✗ Incorrect
Insertion and deletion in a sorted array require shifting elements, making these operations inefficient.
In a max-heap, where is the maximum element located?
AAt the root
BAt the last leaf
CAt the middle node
DAt the leftmost leaf
✗ Incorrect
The max-heap property ensures the maximum element is always at the root.
Which data structure is best for fast insertion and removal of the highest priority element?
AHeap
BSorted array
CLinked list
DUnsorted array
✗ Incorrect
Heap supports both insertion and removal in O(log n), making it ideal for priority queues.
Explain why heaps exist and what problems sorted arrays face in dynamic data scenarios.
Think about how data changes over time and how each structure handles updates.
You got /4 concepts.
Describe the main differences in time complexity between heaps and sorted arrays for insertion and deletion.
Focus on how elements move or shift in each structure.
You got /4 concepts.
Practice
(1/5)
1. Why do we use a heap instead of just a sorted array for priority queue operations?
easy
A. Because heaps use less memory than arrays
B. Because heaps allow faster insertion and deletion of the highest priority element
C. Because heaps store elements in sorted order permanently
D. Because heaps do not allow duplicate elements
Solution
Step 1: Understand insertion and deletion in sorted arrays
Inserting or deleting an element in a sorted array requires shifting elements, which takes O(n) time.
Step 2: Compare with heap operations
Heaps allow insertion and deletion of the highest priority element in O(log n) time by maintaining a tree structure.
Final Answer:
Because heaps allow faster insertion and deletion of the highest priority element -> Option B
Quick Check:
Heap operations faster than sorted array for insert/delete [OK]
Hint: Heaps speed up insert/delete compared to sorted arrays [OK]
Common Mistakes:
Thinking heaps keep elements fully sorted
Assuming heaps use less memory than arrays
Believing heaps disallow duplicates
2. Which of the following is the correct way to insert an element into a max heap in C++ using STL?
easy
A. std::push_heap(v.begin(), v.end())
B. std::push_heap(v.begin(), v.end(), std::greater<int>())
C. std::push_heap(v.begin(), v.end(), std::less<int>())
D. std::push_heap(v.begin(), v.end(), std::equal_to<int>())
Solution
Step 1: Recall default heap behavior in C++ STL
By default, std::push_heap creates a max heap using std::less comparator implicitly.
Step 2: Check the correct syntax for push_heap
std::push_heap(v.begin(), v.end()) is the correct call to insert the last element into the max heap.
Final Answer:
std::push_heap(v.begin(), v.end()) -> Option A
Quick Check:
Default max heap uses push_heap without comparator [OK]
Hint: Use push_heap without comparator for max heap [OK]
Common Mistakes:
Using std::greater instead of default std::less
Passing wrong comparator to push_heap
Confusing push_heap with push_back
3. Consider the following C++ code snippet:
std::vector<int> v = {10, 20, 15};
std::make_heap(v.begin(), v.end());
v.push_back(30);
std::push_heap(v.begin(), v.end());
v.pop_back();
std::pop_heap(v.begin(), v.end());
for (int x : v) std::cout << x << " ";
What is the output?
medium
A. 30 20 10
B. 30 20 15
C. 20 15 10 30
D. 20 15 30
Solution
Step 1: Build initial max heap from {10, 20, 15}
After std::make_heap, the vector becomes a max heap: {20, 10, 15}.
Step 2: Add 30 and push_heap
After push_back(30) and push_heap, 30 moves to root: {30, 20, 15, 10}.
Step 3: pop_back and pop_heap
pop_back removes last element (10), vector becomes {30, 20, 15}, then pop_heap swaps max to end {15, 20, 30} and heapifies the front: {20, 15, 30}.
Step 4: Output vector elements
After pop_heap, the vector is {20, 15, 30}. The for loop prints all elements including the swapped max at the end, so output is "20 15 30 ".
Final Answer:
20 15 30 -> Option D
Quick Check:
Heap after pop_heap = 20 15 30 [OK]
Hint: Remember pop_heap swaps max to end before pop_back [OK]
Common Mistakes:
Ignoring that pop_heap swaps max to end
Forgetting to call push_heap after push_back
Assuming vector size unchanged after pop_back
4. The following code attempts to maintain a min heap using C++ STL heap functions:
But the smallest element is not at the front after these operations. What is the error?
medium
A. std::make_heap and std::push_heap create max heaps by default, not min heaps
B. The vector must be sorted before calling make_heap
C. push_back should be called after push_heap
D. The vector should be empty before calling make_heap
Solution
Step 1: Understand default heap behavior in C++ STL
By default, make_heap and push_heap create max heaps, so smallest element won't be at front.
Step 2: Identify missing comparator for min heap
To create a min heap, a comparator like std::greater<int> must be passed to make_heap and push_heap.
Final Answer:
std::make_heap and std::push_heap create max heaps by default, not min heaps -> Option A
Quick Check:
Default heap is max heap, need comparator for min heap [OK]
Hint: Default STL heaps are max heaps; add comparator for min heap [OK]
Common Mistakes:
Assuming make_heap sorts the vector
Calling push_heap before push_back
Thinking vector must be empty before make_heap
5. You have a large stream of numbers arriving one by one. You want to always quickly find the median after each insertion. Why is a heap-based approach better than keeping a fully sorted array?
hard
A. Because heaps use less memory than arrays
B. Because heaps keep all elements sorted internally
C. Because heaps allow insertion in O(log n) and median retrieval in O(1) using two heaps
D. Because arrays cannot store large data
Solution
Step 1: Understand median finding with sorted array
Maintaining a sorted array requires O(n) insertion time to keep order after each new number.
Step 2: Understand median finding with two heaps
Using two heaps (max heap for lower half, min heap for upper half) allows O(log n) insertion and O(1) median retrieval.
Final Answer:
Because heaps allow insertion in O(log n) and median retrieval in O(1) using two heaps -> Option C
Quick Check:
Two heaps optimize median updates efficiently [OK]
Hint: Two heaps give fast median updates, arrays are slow [OK]
Common Mistakes:
Thinking heaps keep all elements sorted
Assuming arrays are always faster
Confusing memory use with speed
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.