Heap Concept Structure and Properties in DSA Typescript - Time & Space Complexity
We want to understand how the time to work with a heap changes as the heap grows.
Specifically, how fast can we add or remove items in a heap as it gets bigger?
Analyze the time complexity of inserting an element into a heap.
function heapInsert(heap: number[], value: number): void {
heap.push(value);
let index = heap.length - 1;
while (index > 0) {
let parentIndex = Math.floor((index - 1) / 2);
if (heap[parentIndex] >= heap[index]) break;
[heap[parentIndex], heap[index]] = [heap[index], heap[parentIndex]];
index = parentIndex;
}
}
This code adds a new number to a max-heap and moves it up to keep the heap property.
Look for loops or repeated steps that take time.
- Primary operation: The while loop that moves the new value up the heap.
- How many times: It runs until the new value reaches the top or finds a parent bigger than itself.
As the heap grows, the height grows slowly compared to the number of items.
| Input Size (n) | Approx. Operations (swaps) |
|---|---|
| 10 | About 3 or 4 |
| 100 | About 6 or 7 |
| 1000 | About 9 or 10 |
Pattern observation: The number of steps grows slowly, roughly with the height of the heap, which increases as the logarithm of n.
Time Complexity: O(log n)
This means adding an item takes time proportional to the height of the heap, which grows slowly as the heap gets bigger.
[X] Wrong: "Adding an item to a heap takes the same time no matter how big the heap is."
[OK] Correct: Because the new item may need to move up many levels, and the number of levels grows with the heap size.
Understanding heap operations and their time costs shows you know how to handle priority data efficiently, a key skill in many coding challenges.
"What if we changed the heap to a min-heap? How would the time complexity of insertion change?"
Practice
Solution
Step 1: Understand max-heap property
A max-heap requires each parent node to be greater than or equal to its children to maintain the heap order.Step 2: Compare options with definition
Every parent node is greater than or equal to its children matches the max-heap property exactly, while others describe min-heap or incorrect properties.Final Answer:
Every parent node is greater than or equal to its children -> Option AQuick Check:
Max-heap property = Every parent ≥ children [OK]
- Confusing max-heap with min-heap property
- Thinking leaves must be sorted
- Assuming all leaf nodes have same value
Solution
Step 1: Identify array declaration syntax in TypeScript
Declaring an array of numbers uses syntax likeconst arr: number[] = [];.Step 2: Check options for correct array declaration
const minHeap: number[] = []; correctly declares an empty number array for min-heap storage. Others either use undefined Heap class or older syntax.Final Answer:
const minHeap: number[] = []; -> Option BQuick Check:
Array declaration with type = const arr: number[] = [] [OK]
- Using undefined Heap class without import
- Using var instead of const or let
- Missing type annotation in TypeScript
const heap = [50, 30, 40, 10, 20];
console.log(heap[1]);
What will be the output?
Solution
Step 1: Understand zero-based indexing in arrays
Arrays in TypeScript start at index 0, so heap[0] = 50, heap[1] = 30.Step 2: Identify value at index 1
heap[1] accesses the second element, which is 30.Final Answer:
30 -> Option DQuick Check:
heap[1] = 30 [OK]
- Assuming heap indexing starts at 1
- Confusing value at index 0 with index 1
- Mixing up max-heap property with array indexing
const heap = [40, 30, 20];
heap.push(50);
// Missing code here to maintain heap property
console.log(heap);
Which code snippet correctly restores the max-heap property after insertion?
Solution
Step 1: Understand heapify-up process for max-heap
After insertion, we compare the inserted node with its parent and swap if child is greater, repeating until heap property is restored.Step 2: Analyze code snippets
while (index > 0 && heap[parent(index)] < heap[index]) { swap(heap, parent(index), index); index = parent(index); } correctly uses a while loop to swap child and parent if child is greater. while (index > 0 && heap[parent(index)] > heap[index]) { swap(heap, parent(index), index); index = parent(index); } reverses condition (wrong for max-heap). Options A, B, and D do not maintain heap structure.Final Answer:
while (index > 0 && heap[parent(index)] < heap[index]) { swap(heap, parent(index), index); index = parent(index); } -> Option CQuick Check:
Heapify-up swaps if child > parent [OK]
- Using wrong comparison direction in heapify-up
- Sorting array instead of heapifying
- Reversing array instead of fixing heap
[5, 10, 15, 20, 25]. You want to insert 12 and maintain the min-heap property. Which sequence of array states correctly shows the heap after insertion and heapify-up?Solution
Step 1: Insert 12 at the end of the array
Initial array after insertion: [5, 10, 15, 20, 25, 12]Step 2: Heapify-up to maintain min-heap
Compare 12 with its parent 15 (index 2). Since 12 < 15, swap them. New array: [5, 10, 12, 20, 25, 15]. No further swaps needed as 12 > 10.Final Answer:
[5, 10, 15, 20, 25, 12] -> [5, 10, 12, 20, 25, 15] -> Option AQuick Check:
Heapify-up swaps child < parent in min-heap [OK]
- Not swapping inserted value with parent when smaller
- Assuming no change after insertion
- Swapping with wrong parent index
Ready to prove it?
Pass the test and this pattern moves unknown
