0
0
DSA Goprogramming~20 mins

Build Heap from Array Heapify in DSA Go - 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
Output of Build Max-Heap from Array
What is the printed state of the array after building a max-heap using heapify on the input array?
DSA Go
package main

import "fmt"

func heapify(arr []int, n int, i int) {
    largest := i
    left := 2*i + 1
    right := 2*i + 2

    if left < n && arr[left] > arr[largest] {
        largest = left
    }

    if right < n && arr[right] > arr[largest] {
        largest = right
    }

    if largest != i {
        arr[i], arr[largest] = arr[largest], arr[i]
        heapify(arr, n, largest)
    }
}

func buildMaxHeap(arr []int) {
    n := len(arr)
    for i := n/2 - 1; i >= 0; i-- {
        heapify(arr, n, i)
    }
}

func main() {
    arr := []int{3, 9, 2, 1, 4, 5}
    buildMaxHeap(arr)
    fmt.Println(arr)
}
A[5, 4, 3, 1, 9, 2]
B[3, 9, 5, 1, 4, 2]
C[9, 3, 5, 1, 4, 2]
D[9, 4, 5, 1, 3, 2]
Attempts:
2 left
💡 Hint
Remember that buildMaxHeap starts heapifying from the last non-leaf node upwards.
Predict Output
intermediate
2:00remaining
Output of Build Min-Heap from Array
What is the printed state of the array after building a min-heap using heapify on the input array?
DSA Go
package main

import "fmt"

func heapify(arr []int, n int, i int) {
    smallest := i
    left := 2*i + 1
    right := 2*i + 2

    if left < n && arr[left] < arr[smallest] {
        smallest = left
    }

    if right < n && arr[right] < arr[smallest] {
        smallest = right
    }

    if smallest != i {
        arr[i], arr[smallest] = arr[smallest], arr[i]
        heapify(arr, n, smallest)
    }
}

func buildMinHeap(arr []int) {
    n := len(arr)
    for i := n/2 - 1; i >= 0; i-- {
        heapify(arr, n, i)
    }
}

func main() {
    arr := []int{7, 2, 6, 3, 9, 1}
    buildMinHeap(arr)
    fmt.Println(arr)
}
A[1, 2, 3, 7, 9, 6]
B[1, 2, 6, 3, 9, 7]
C[2, 3, 1, 7, 9, 6]
D[1, 3, 2, 6, 7, 9]
Attempts:
2 left
💡 Hint
Build min-heap by heapifying from last non-leaf node upwards, ensuring smallest element at root.
🔧 Debug
advanced
2:00remaining
Identify the Bug in Heapify Function
What error will occur when running this heapify function on an array?
DSA Go
func heapify(arr []int, n int, i int) {
    largest := i
    left := 2*i
    right := 2*i + 1

    if left < n && arr[left] > arr[largest] {
        largest = left
    }

    if right < n && arr[right] > arr[largest] {
        largest = right
    }

    if largest != i {
        arr[i], arr[largest] = arr[largest], arr[i]
        heapify(arr, n, largest)
    }
}
AIndex out of range runtime panic
BNo error, runs correctly
CCompilation error due to missing return
DStack overflow due to infinite recursion
Attempts:
2 left
💡 Hint
Check how left and right child indices are calculated for a zero-based array.
Predict Output
advanced
2:00remaining
Resulting Array After Partial Heapify
Given the array and a call to heapify at index 1, what is the resulting array?
DSA Go
package main

import "fmt"

func heapify(arr []int, n int, i int) {
    largest := i
    left := 2*i + 1
    right := 2*i + 2

    if left < n && arr[left] > arr[largest] {
        largest = left
    }

    if right < n && arr[right] > arr[largest] {
        largest = right
    }

    if largest != i {
        arr[i], arr[largest] = arr[largest], arr[i]
        heapify(arr, n, largest)
    }
}

func main() {
    arr := []int{4, 10, 3, 5, 1}
    heapify(arr, len(arr), 1)
    fmt.Println(arr)
}
A[4, 10, 3, 5, 1]
B]1 ,5 ,3 ,01 ,4[
C4, 10, 3, 5, 1]
D[4, 10, 3, 5, 1
Attempts:
2 left
💡 Hint
Check if the subtree rooted at index 1 needs rearrangement.
Predict Output
expert
3:00remaining
Final Array After Build Max-Heap on Large Input
What is the final array after building a max-heap from this input array?
DSA Go
package main

import "fmt"

func heapify(arr []int, n int, i int) {
    largest := i
    left := 2*i + 1
    right := 2*i + 2

    if left < n && arr[left] > arr[largest] {
        largest = left
    }

    if right < n && arr[right] > arr[largest] {
        largest = right
    }

    if largest != i {
        arr[i], arr[largest] = arr[largest], arr[i]
        heapify(arr, n, largest)
    }
}

func buildMaxHeap(arr []int) {
    n := len(arr)
    for i := n/2 - 1; i >= 0; i-- {
        heapify(arr, n, i)
    }
}

func main() {
    arr := []int{12, 11, 13, 5, 6, 7, 17, 1, 8, 9}
    buildMaxHeap(arr)
    fmt.Println(arr)
}
A[13, 11, 17, 5, 6, 7, 12, 1, 8, 9]
B[17, 11, 13, 9, 6, 7, 12, 1, 8, 10]
C[17, 11, 13, 9, 6, 7, 12, 1, 8, 5]
D[17, 13, 12, 9, 11, 7, 6, 1, 8, 5]
Attempts:
2 left
💡 Hint
Build max-heap by heapifying from last non-leaf node upwards.