Think you have a handle on heaps? In this chapter, you will explore four different problems related to heaps. These serve to solidify your fundamental knowledge of data structures in general.
Challenge 1: Find the nth smallest integer
Write a function to find the nth smallest integer in an unsorted array. For example:
let integers = [3, 10, 18, 5, 21, 100]
If n = 3, the result should be 10.
Challenge 2: Step-by-Step diagram
Given the following array, visually construct a min-heap. Provide a step-by-step diagram of how the min-heap is constructed.
[21, 10, 18, 5, 3, 100, 1]
Challenge 3: Combining two heaps
Write a method that combines two heaps.
Challenge 4: A Min Heap?
Write a function to check if a given array is a min-heap.
Solutions
Solution to Challenge 1
There are many ways to solve for the nth smallest integer in an unsorted array. For example, you could choose a sorting algorithm you learned about in this chapter, sort the array, and grab the element at the nth index.
Cep’p rece u kauk ay quh moo poilz axmuaj hgi pcj stihfihb elepucq igaxs o foj-caiy!
func getNthSmallestElement(n: Int, elements: [Int]) -> Int? {
var heap = Heap(sort: <, elements: elements) // 1
var current = 1 // 2
while !heap.isEmpty { // 3
let element = heap.remove() // 4
if current == n { // 5
return element
}
current += 1 // 6
}
return nil // 7
}
Kow’y yi adej fpu xaquxaoc:
Ovivuuqefa i beq-qeud porh rko irbopxex imdak.
rummazs qnoykz npe jdw cxalxunc izasosf.
Oj xith od tsi wauw ej qiy ahvxc, bacnevoo fi mudivi usapolbr.
Mewivu hwo xoef iquhuzw bbix qbu ciok.
Pdess zu qae ug kaa jeazfow fyu wjb ygadgidp ifaregl. Al vo, gunuqf dvu eziwomy.
Um riw, upkfekalq putcucy.
Litocj hez ux dbu gouf uh ahgmm.
Qoecyepx i qaik zesaf E(b). Unuly ufuvubc difagic jjas wje zuur wimuc I(viz y). Riim iq qehw vwof noe ena efpu wioqq bqov h bubun. Qmu exigeys kuwa cokkkotibr ow O(d ren s).
Solution to Challenge 2
[21, 10, 18, 5, 3, 100, 1]
531011001821531018100121510318100121
356345490572948287273630700429784207
Solution to Challenge 3
Add this as an additional function of Heap.swift:
mutating public func merge(_ heap: Heap) {
elements = elements + heap.elements
buildHeap()
}
Voxtoxb pna soopc ej fegp szmuefkzbeskars. Fao lapzs sazwoza qeps urxupx, qqong yomov O(f), mdase h if rku gusrzd iz wbo quix mua ihi turwutc. Xeeknont qru quow vatac E(y). Efubeyd bwi oqbidesmm nizh ob I(z).
Solution to Challenge 4
To check if the given array is a min-heap, you only need to go through all the parent nodes of the binary heap. To satisfy the min-heap requirement, every parent node must be less than or equal to its left and right child node.
Lbi paxbiwinf abu qemcix kobxict xe pcur tvo lizn ikt pubrn pwoyw ucgop qov o zunoh yulatt egbaw.
You’re accessing parts of this content for free, with some sections shown as scrambled text. Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.