Bird
Raised Fist0
DSA Typescriptprogramming~5 mins

Heap Concept Structure and Properties in DSA Typescript - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Heap Concept Structure and Properties
O(log n)
Understanding Time 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?

Scenario Under Consideration

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.

Identify Repeating Operations

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.
How Execution Grows With Input

As the heap grows, the height grows slowly compared to the number of items.

Input Size (n)Approx. Operations (swaps)
10About 3 or 4
100About 6 or 7
1000About 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.

Final Time Complexity

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.

Common Mistake

[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.

Interview Connect

Understanding heap operations and their time costs shows you know how to handle priority data efficiently, a key skill in many coding challenges.

Self-Check

"What if we changed the heap to a min-heap? How would the time complexity of insertion change?"

Practice

(1/5)
1. What is a key property of a max-heap data structure?
easy
A. Every parent node is greater than or equal to its children
B. Every parent node is less than or equal to its children
C. All leaf nodes have the same value
D. The heap is always a complete binary tree with sorted leaves

Solution

  1. 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.
  2. 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.
  3. Final Answer:

    Every parent node is greater than or equal to its children -> Option A
  4. Quick Check:

    Max-heap property = Every parent ≥ children [OK]
Hint: Max-heap means parent ≥ children always [OK]
Common Mistakes:
  • Confusing max-heap with min-heap property
  • Thinking leaves must be sorted
  • Assuming all leaf nodes have same value
2. Which of the following is the correct TypeScript syntax to declare a min-heap using an array?
easy
A. let minHeap = new Heap();
B. const minHeap: number[] = [];
C. const minHeap: Heap = new Heap();
D. var minHeap = [];

Solution

  1. Step 1: Identify array declaration syntax in TypeScript

    Declaring an array of numbers uses syntax like const arr: number[] = [];.
  2. 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.
  3. Final Answer:

    const minHeap: number[] = []; -> Option B
  4. Quick Check:

    Array declaration with type = const arr: number[] = [] [OK]
Hint: Use const name: type[] = [] for array declaration [OK]
Common Mistakes:
  • Using undefined Heap class without import
  • Using var instead of const or let
  • Missing type annotation in TypeScript
3. Given the following TypeScript code for a max-heap array representation:
const heap = [50, 30, 40, 10, 20];
console.log(heap[1]);

What will be the output?
medium
A. 10
B. 50
C. 40
D. 30

Solution

  1. Step 1: Understand zero-based indexing in arrays

    Arrays in TypeScript start at index 0, so heap[0] = 50, heap[1] = 30.
  2. Step 2: Identify value at index 1

    heap[1] accesses the second element, which is 30.
  3. Final Answer:

    30 -> Option D
  4. Quick Check:

    heap[1] = 30 [OK]
Hint: Array index starts at 0, so heap[1] is second element [OK]
Common Mistakes:
  • Assuming heap indexing starts at 1
  • Confusing value at index 0 with index 1
  • Mixing up max-heap property with array indexing
4. Consider this TypeScript snippet to insert a value into a max-heap array:
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?
medium
A. heap.sort((a, b) => a - b);
B. while (index > 0 && heap[parent(index)] > heap[index]) { swap(heap, parent(index), index); index = parent(index); }
C. while (index > 0 && heap[parent(index)] < heap[index]) { swap(heap, parent(index), index); index = parent(index); }
D. heap.reverse();

Solution

  1. 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.
  2. 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.
  3. Final Answer:

    while (index > 0 && heap[parent(index)] < heap[index]) { swap(heap, parent(index), index); index = parent(index); } -> Option C
  4. Quick Check:

    Heapify-up swaps if child > parent [OK]
Hint: Swap up while child > parent to fix max-heap [OK]
Common Mistakes:
  • Using wrong comparison direction in heapify-up
  • Sorting array instead of heapifying
  • Reversing array instead of fixing heap
5. You have a min-heap represented as an array: [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?
hard
A. [5, 10, 15, 20, 25, 12] -> [5, 10, 12, 20, 25, 15]
B. [5, 10, 15, 20, 25, 12] -> [5, 10, 15, 20, 25, 12]
C. [5, 10, 15, 20, 25, 12] -> [5, 12, 15, 20, 25, 10]
D. [5, 10, 15, 20, 25, 12] -> [12, 5, 15, 20, 25, 10]

Solution

  1. Step 1: Insert 12 at the end of the array

    Initial array after insertion: [5, 10, 15, 20, 25, 12]
  2. 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.
  3. Final Answer:

    [5, 10, 15, 20, 25, 12] -> [5, 10, 12, 20, 25, 15] -> Option A
  4. Quick Check:

    Heapify-up swaps child < parent in min-heap [OK]
Hint: Swap inserted value up while smaller than parent in min-heap [OK]
Common Mistakes:
  • Not swapping inserted value with parent when smaller
  • Assuming no change after insertion
  • Swapping with wrong parent index
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard