📖 Scenario: You have a list of exam scores from students. You want to find the kth largest score to see who scored in the top ranks.
🎯 Goal: Build a program that uses a max heap to find the kth largest element in a list of numbers.
📋 What You'll Learn
Create an array called scores with exact values
Create a variable called k to hold the rank number
Build a max heap from the scores array
Extract the maximum element k times to find the kth largest score
Print the kth largest score
💡 Why This Matters
🌍 Real World
Finding the kth largest value is useful in ranking systems, like finding the top scores in exams or the highest sales in a store.
💼 Career
Understanding heaps and selection algorithms is important for software engineers working on data processing, search engines, and performance optimization.
Progress0 / 4 steps
1
Create the scores array
Create an array called scores with these exact values: 85, 42, 96, 73, 58, 99, 67
DSA Javascript
Hint
Use const scores = [85, 42, 96, 73, 58, 99, 67]; to create the array.
2
Set the kth largest rank
Create a variable called k and set it to 3 to find the 3rd largest score
DSA Javascript
Hint
Use const k = 3; to set the rank.
3
Build max heap and extract kth largest
Write a function called buildMaxHeap that takes an array and builds a max heap. Then write a function called extractMax that removes and returns the largest element from the heap. Use these functions to extract the maximum element k times from scores and store the last extracted value in a variable called kthLargest
DSA Javascript
Hint
Use heapify to build the max heap. Extract max k times to get the kth largest.
4
Print the kth largest score
Write a console.log statement to print the value of kthLargest
DSA Javascript
Hint
Use console.log(kthLargest); 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 max heap from the array and extract the max element k times
B. Sort the array and pick the kth element from the start
C. Use a min heap to store all elements and pop k times
D. Reverse the array and pick the kth element
Solution
Step 1: Understand max heap property
A max heap always keeps the largest element at the root, so extracting the root gives the largest element.
Step 2: Extract max k times to get the kth largest
By removing the root k times, the last extracted element is the kth largest.
Final Answer:
Build max heap and extract max k times -> Option A
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
Sorting and picking wrong index
Extracting fewer or more than k times
2. Which of the following is the correct way to create a max heap from an array arr in JavaScript using a custom heap class?
easy
A. const maxHeap = new MaxHeap(arr); maxHeap.heapify();
B. const maxHeap = new MaxHeap(); maxHeap.insert(arr);
C. const maxHeap = new MaxHeap(); maxHeap.build(arr);
D. const maxHeap = new MaxHeap(arr); maxHeap.buildHeap();
Solution
Step 1: Recognize typical max heap initialization
Usually, a max heap class accepts an array and has a method like buildHeap() to create the heap structure.
Step 2: Identify correct method call
buildHeap() is the standard method to convert the array into a max heap, so calling it after initialization is correct.
Final Answer:
const maxHeap = new MaxHeap(arr); maxHeap.buildHeap(); -> Option D
Quick Check:
buildHeap() builds max heap from array [OK]
Hint: Use buildHeap() after passing array to MaxHeap constructor [OK]
Common Mistakes:
Calling insert with whole array instead of single elements
Using wrong method names like heapify or build
Not calling any method to build the heap
3. What will be the output of the following code snippet?
class MaxHeap {
constructor(arr) {
this.heap = arr;
this.buildHeap();
}
buildHeap() {
for (let i = Math.floor(this.heap.length / 2) - 1; i >= 0; i--) {
this.heapify(i);
}
}
heapify(i) {
let largest = i;
let left = 2 * i + 1;
let right = 2 * i + 2;
if (left < this.heap.length && this.heap[left] > this.heap[largest]) largest = left;
if (right < this.heap.length && this.heap[right] > this.heap[largest]) largest = right;
if (largest !== i) {
[this.heap[i], this.heap[largest]] = [this.heap[largest], this.heap[i]];
this.heapify(largest);
}
}
extractMax() {
if (this.heap.length === 0) return null;
const max = this.heap[0];
this.heap[0] = this.heap.pop();
this.heapify(0);
return max;
}
}
const arr = [3, 2, 1, 5, 6, 4];
const maxHeap = new MaxHeap(arr);
let kthLargest;
for (let i = 0; i < 2; i++) {
kthLargest = maxHeap.extractMax();
}
console.log(kthLargest);
medium
A. 6
B. 5
C. 4
D. 3
Solution
Step 1: Build max heap from array
Array [3,2,1,5,6,4] becomes max heap with root 6 after buildHeap.
Step 2: Extract max twice
First extractMax returns 6, second extractMax returns 5, so kthLargest after loop is 5.
Final Answer:
5 -> Option B
Quick Check:
2nd largest element = 5 [OK]
Hint: Extract max twice from max heap to get 2nd largest [OK]
Common Mistakes:
Assuming heap root changes incorrectly after extraction
Confusing 1st largest with 2nd largest
Not updating heap after extraction
4. Identify the bug in the following code that tries to find the 3rd largest element using a max heap:
class MaxHeap {
constructor(arr) {
this.heap = arr;
this.buildHeap();
}
buildHeap() {
for (let i = 0; i < this.heap.length / 2; i++) {
this.heapify(i);
}
}
heapify(i) {
let largest = i;
let left = 2 * i + 1;
let right = 2 * i + 2;
if (left < this.heap.length && this.heap[left] > this.heap[largest]) largest = left;
if (right < this.heap.length && this.heap[right] > this.heap[largest]) largest = right;
if (largest !== i) {
[this.heap[i], this.heap[largest]] = [this.heap[largest], this.heap[i]];
this.heapify(largest);
}
}
extractMax() {
if (this.heap.length === 0) return null;
const max = this.heap[0];
this.heap[0] = this.heap.pop();
this.heapify(0);
return max;
}
}
const arr = [7, 10, 4, 3, 20, 15];
const maxHeap = new MaxHeap(arr);
let kthLargest;
for (let i = 0; i < 3; i++) {
kthLargest = maxHeap.extractMax();
}
console.log(kthLargest);
medium
A. The buildHeap loop should run backwards from middle to 0
B. extractMax should not call heapify after popping
C. heapify should swap with smallest child instead of largest
D. The array should be sorted before building the heap
Solution
Step 1: Analyze buildHeap loop direction
Heap building requires heapify calls from last parent to root, so loop must run backwards from middle to 0.
Step 2: Identify incorrect loop direction
Current loop runs forwards, which does not correctly heapify the tree, causing incorrect heap structure.
Final Answer:
The buildHeap loop should run backwards from middle to 0 -> Option A
Quick Check:
buildHeap loop direction = backwards [OK]
Hint: buildHeap loop must run backwards from middle to root [OK]
Common Mistakes:
Running buildHeap loop forwards
Not calling heapify after extractMax
Swapping with wrong child in heapify
5. Given an array arr = [12, 3, 5, 7, 19, 0, 4], write a JavaScript function using a max heap to find the 4th largest element. What is the output of your function?
hard
A. 4
B. 5
C. 7
D. 3
Solution
Step 1: Build max heap from array
Array becomes max heap with root 19 after heapify.
Step 2: Extract max 4 times
Extracted elements in order: 19, 12, 7, 5. The 4th largest is 7.
Final Answer:
7 -> Option C
Quick Check:
4th largest element = 7 [OK]
Hint: Extract max k times; last extracted is kth largest [OK]
Common Mistakes:
Extracting fewer times than k
Confusing 3rd largest with 4th largest
Not rebuilding heap after extraction
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.