0
0
DSA Typescriptprogramming~20 mins

Heap Extract Min or Max Bubble Down in DSA Typescript - Practice Problems & Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Heap Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
What is the output after extracting min from this min-heap?
Given the min-heap array representation [2, 5, 3, 9, 6], what is the heap array after extracting the minimum element and performing bubble down?
DSA Typescript
function extractMin(heap: number[]): number[] {
  const min = heap[0];
  heap[0] = heap[heap.length - 1];
  heap.pop();
  let i = 0;
  while (true) {
    let left = 2 * i + 1;
    let right = 2 * i + 2;
    let smallest = i;
    if (left < heap.length && heap[left] < heap[smallest]) smallest = left;
    if (right < heap.length && heap[right] < heap[smallest]) smallest = right;
    if (smallest === i) break;
    [heap[i], heap[smallest]] = [heap[smallest], heap[i]];
    i = smallest;
  }
  return heap;
}

console.log(extractMin([2, 5, 3, 9, 6]));
A[3, 5, 6, 9]
B[3, 6, 5, 9]
C[5, 3, 6, 9]
D[5, 6, 3, 9]
Attempts:
2 left
💡 Hint
Remember to replace the root with the last element and bubble down by swapping with the smaller child.
Predict Output
intermediate
2:00remaining
What is the heap after extracting max from this max-heap?
Given the max-heap array [20, 15, 18, 8, 10, 17], what is the array after extracting the maximum element and bubble down?
DSA Typescript
function extractMax(heap: number[]): number[] {
  const max = heap[0];
  heap[0] = heap[heap.length - 1];
  heap.pop();
  let i = 0;
  while (true) {
    let left = 2 * i + 1;
    let right = 2 * i + 2;
    let largest = i;
    if (left < heap.length && heap[left] > heap[largest]) largest = left;
    if (right < heap.length && heap[right] > heap[largest]) largest = right;
    if (largest === i) break;
    [heap[i], heap[largest]] = [heap[largest], heap[i]];
    i = largest;
  }
  return heap;
}

console.log(extractMax([20, 15, 18, 8, 10, 17]));
A[17, 15, 18, 8, 10]
B[18, 15, 17, 8, 10]
C[15, 18, 17, 8, 10]
D[18, 15, 10, 8, 17]
Attempts:
2 left
💡 Hint
Replace root with last element and bubble down by swapping with the larger child.
🔧 Debug
advanced
2:30remaining
Identify the bug in this bubble down implementation for min-heap extract
This code is supposed to extract the minimum from a min-heap and bubble down the root. What is the bug causing incorrect heap after extraction?
DSA Typescript
function extractMinBuggy(heap: number[]): number[] {
  const min = heap[0];
  heap[0] = heap.pop()!;
  let i = 0;
  while (true) {
    let left = 2 * i + 1;
    let right = 2 * i + 2;
    let smallest = i;
    if (left < heap.length && heap[left] < heap[smallest]) smallest = left;
    if (right < heap.length && heap[right] < heap[smallest]) smallest = right;
    if (smallest === i) break;
    [heap[i], heap[smallest]] = [heap[smallest], heap[i]];
    i = smallest;
  }
  return heap;
}

console.log(extractMinBuggy([2, 5, 3, 9, 6]));
AUsing heap.pop()! to replace root removes last element but does not handle empty heap correctly.
BUsing heap.pop()! directly assigns undefined when heap is empty, causing errors.
CAssigning heap[0] = heap.pop()! removes last element but does not reduce heap size properly.
DReplacing root with heap.pop()! before popping removes the last element twice.
Attempts:
2 left
💡 Hint
Check what happens when heap.pop() returns undefined and how root is replaced.
🧠 Conceptual
advanced
1:30remaining
Why does bubble down maintain heap property after extraction?
After extracting the root from a heap and replacing it with the last element, why does the bubble down process restore the heap property?
ABecause bubble down inserts a new element at the root and shifts others down.
BBecause bubble down sorts the entire heap array to maintain order.
CBecause bubble down removes all leaf nodes that violate the heap property.
DBecause bubble down swaps the root with the smallest/largest child until the heap property is restored at every level.
Attempts:
2 left
💡 Hint
Think about how heap property depends on parent-child relationships.
Predict Output
expert
3:00remaining
What is the heap array after extracting min twice from this min-heap?
Given the min-heap array [1, 3, 6, 5, 9, 8], what is the heap array after extracting the minimum element twice (with bubble down after each extraction)?
DSA Typescript
function extractMin(heap: number[]): number[] {
  const min = heap[0];
  heap[0] = heap[heap.length - 1];
  heap.pop();
  let i = 0;
  while (true) {
    let left = 2 * i + 1;
    let right = 2 * i + 2;
    let smallest = i;
    if (left < heap.length && heap[left] < heap[smallest]) smallest = left;
    if (right < heap.length && heap[right] < heap[smallest]) smallest = right;
    if (smallest === i) break;
    [heap[i], heap[smallest]] = [heap[smallest], heap[i]];
    i = smallest;
  }
  return heap;
}

let heap = [1, 3, 6, 5, 9, 8];
heap = extractMin(heap);
heap = extractMin(heap);
console.log(heap);
A[3, 6, 8, 9]
B[6, 5, 8, 9]
C[5, 8, 6, 9]
D[3, 5, 6, 9]
Attempts:
2 left
💡 Hint
Perform extraction and bubble down step by step twice.