Efficient Usage of Heaps to Determine Prefix Medians in JavaScript

Introduction

Hello there, budding programmer! I hope you're ready because today we're going to dive deep into high-level data manipulation and increase our understanding of heaps. Heaps are fundamental data structures commonly used in algorithms. We're going to leverage their potential today in an interesting algorithmic problem. Are you ready for the challenge? Let's get started!

Task Statement

We have a task at hand related to array manipulation and the use of heaps. The task is as follows: Given an array of unique integers with elements ranging from 11 to 10610^6 and length between 11 to 10001000, we need to create a JavaScript function prefixMedian(). This function will take the array as input and return a corresponding array, which consists of the medians of all the prefixes of the input array.

Remember that a prefix of an array is a contiguous subsequence that starts from the first element. The median of a sequence of numbers is the middle number when the sequence is sorted. If the length of the sequence is even, the median is the element in the position length / 2 - 1.

For example, consider an input array [1, 9, 2, 8, 3]. The output of your function should be [1, 1, 2, 2, 3].

Heap and Its Operations

A heap is a specialized binary tree-based data structure that satisfies the heap property: for a Min Heap, every parent node is less than or equal to its child nodes; for a Max Heap, every parent node is greater than or equal to its child nodes. This property makes heaps particularly efficient for operations like finding the minimum or maximum value.

In practice, heaps can be implemented using arrays. For a given node at index i in an array:

  • Its left child is at index 2 * i + 1
  • Its right child is at index 2 * i + 2
  • Its parent is at index Math.floor((i - 1) / 2)

In our context, we use two specific types of heaps: a Min Heap and a Max Heap. The Min Heap is used to store the larger half of the numbers seen so far, while the Max Heap stores the smaller half. JavaScript does not have built-in heap functionality, so we will implement one or use an external library.

Here, we'll use simple custom implementations for MinHeap and MaxHeap.

Min Heap and Max Heap Implementation

Sign up

Join the 1M+ learners on CodeSignal

Be a part of our community of 1M+ users who develop and demonstrate their skills on CodeSignal