📖 Scenario: You have a list of numbers representing scores in a game. You want to find the kth largest score to award a prize.
🎯 Goal: Build a program that uses a max heap to find the kth largest element in a list of integers.
📋 What You'll Learn
Create an array called numbers with exactly these values: 20, 15, 30, 5, 10, 25, 35
Create an integer variable called k and set it to 3
Build a max heap from the numbers array
Extract the maximum element from the heap k times to find the kth largest element
Print the kth largest element
💡 Why This Matters
🌍 Real World
Finding the kth largest value is useful in games for ranking scores, in finance for top transactions, or in data analysis for thresholding.
💼 Career
Understanding heaps and selection algorithms is important for software engineers working on performance-critical applications, databases, and real-time systems.
Progress0 / 4 steps
1
Create the initial array of numbers
Create an integer array called numbers with these exact values: 20, 15, 30, 5, 10, 25, 35
DSA C
Hint
Use int numbers[] = {20, 15, 30, 5, 10, 25, 35}; to create the array.
2
Set the value of k
Create an integer variable called k and set it to 3
DSA C
Hint
Use int k = 3; to create the variable.
3
Build max heap and find kth largest element
Write functions to build a max heap from the numbers array and extract the maximum element. Then, extract the maximum element k times to find the kth largest element. Store the kth largest element in an integer variable called kth_largest.
DSA C
Hint
Use build_max_heap to create the heap, then call extract_maxk times to get the kth largest.
4
Print the kth largest element
Print the value of the variable kth_largest using printf.
DSA C
Hint
Use printf("%d\n", kth_largest); to print the result.
Practice
(1/5)
1. What is the main idea behind finding the kth largest element using a max heap?
easy
A. Build a min heap and extract the minimum element k times
B. Build a max heap from the array and extract the maximum element k times
C. Sort the array and pick the kth element from the start
D. Use a hash map to count frequencies and find the kth largest
Solution
Step 1: Understand max heap property
A max heap always keeps the largest element at the root, so extracting the root gives the current largest element.
Step 2: Extract max k times to get kth largest
By removing the root k times, the last extracted element is the kth largest.
Final Answer:
Build a max heap and extract max k times -> Option B
Quick Check:
Max heap extraction = kth largest element [OK]
Hint: Extract max from max heap k times to find kth largest [OK]
Common Mistakes:
Using min heap instead of max heap
Extracting fewer or more than k times
Sorting and picking wrong index
2. Which of the following is the correct C code snippet to build a max heap from an array arr of size n?
easy
A. for (int i = n - 1; i >= 0; i--) heapify(arr, n, i);
B. for (int i = 0; i < n; i++) heapify(arr, n, i);
C. for (int i = n / 2 - 1; i >= 0; i--) heapify(arr, n, i);
D. for (int i = 1; i < n; i++) heapify(arr, n, i);
Solution
Step 1: Identify heapify starting point
Heapify must start from the last non-leaf node, which is at index n/2 - 1, moving upwards.
Step 2: Loop from n/2 - 1 down to 0
This ensures all subtrees satisfy max heap property, building the heap correctly.
Final Answer:
for (int i = n / 2 - 1; i >= 0; i--) heapify(arr, n, i); -> Option C
Quick Check:
Build max heap loop = from n/2 - 1 down [OK]
Hint: Build heap from last non-leaf node down to root [OK]
Common Mistakes:
Starting heapify from 0 upwards
Starting heapify from last element
Using wrong loop boundaries
3. What is the output of the following C code snippet to find the 3rd largest element?
int arr[] = {4, 10, 3, 5, 1};
int n = 5;
int k = 3;
buildMaxHeap(arr, n);
int result;
for (int i = 0; i < k; i++) {
result = extractMax(arr, &n);
}
printf("%d\n", result);
Assume buildMaxHeap and extractMax work correctly.
medium
A. 3
B. 5
C. 10
D. 4
Solution
Step 1: Build max heap from array
Max heap root is 10, heap structure after build: [10, 5, 3, 4, 1]
Step 2: Extract max 3 times
1st extract: 10, 2nd extract: 5, 3rd extract: 4 (this is the 3rd largest)
Final Answer:
4 -> Option D
Quick Check:
3rd largest element = 4 [OK]
Hint: Extract max k times; last extracted is kth largest [OK]
Common Mistakes:
Confusing 3rd largest with 3rd smallest
Not updating heap size after extraction
Assuming array is sorted after buildMaxHeap
4. Identify the bug in the following code snippet that tries to find the 2nd largest element using a max heap:
int arr[] = {7, 2, 9, 4};
int n = 4;
int k = 2;
buildMaxHeap(arr, n);
int result = extractMax(arr, n);
for (int i = 1; i < k; i++) {
result = extractMax(arr, n);
}
printf("%d\n", result);
medium
A. The heap size n is not updated after extraction
B. The loop should start from i = 0 instead of 1
C. The array is not sorted before building the heap
D. The variable result is not initialized
Solution
Step 1: Check heap size update after extraction
Extracting max reduces heap size, but n is passed unchanged, so heap operations are incorrect.
Step 2: Correct by passing pointer or updating n
Heap size must decrease after each extraction to maintain heap property correctly.
Final Answer:
Heap size n is not updated after extraction -> Option A
Quick Check:
Update heap size after extractMax [OK]
Hint: Always update heap size after extraction [OK]
Common Mistakes:
Not decreasing heap size after extractMax
Incorrect loop start index
Assuming array must be sorted before heap
5. Given an array arr = {12, 3, 5, 7, 19, 0, 4}, write the steps to find the 4th largest element using a max heap. What is the 4th largest element?
hard
A. 5
B. 3
C. 4
D. 7
Solution
Step 1: Build max heap from the array
Heap root is 19, heap structure after build: [19, 12, 5, 7, 3, 0, 4]