Search⌘ K
AI Features

Find Median from Data Stream

Explore how to implement a MedianOfStream class that inserts numbers dynamically and finds the median in constant time using heaps. Understand the problem constraints, median calculation methods for odd and even sized data, and develop a solution to handle a continuous flow of integers effectively.

Statement

Design a data structure that stores a dynamically changing list of integers and can find the median in constant time, O(1)O(1), as the list grows. To do that, implement a class named MedianOfStream with the following functionality:

  • Constructor(): Initializes an instance of the class.

  • insertNum(int num): Adds a new integer num to the data structure.

  • findMedian(): Returns the median of all integers added so far.

Note: The median is the middle value in a sorted list of integers.

  • For an odd-sized list (e.g., [4,5,6][4, 5, 6]), the median is the middle element: 55.

  • For an even-sized list (e.g., [2,4,6,8][2, 4, 6, 8]), the median is the average of the two middle elements: (4+6)/2=5(4 + 6) / 2 = 5.

Constraints:

  • 105-10^5 \leq num 105\leq 10^5, where num is an integer received from the data stream.

  • There will be at least one element in the data structure before the median is computed.

  • At most, 500500 calls will be made to the function that calculates the median.

Examples

canvasAnimation-image
1 / 3

Understand the problem

Take a moment to make sure you’ve correctly understood the problem. The quiz below will help you check if you’re solving the correct problem:

Find Median from a Data Stream

1.

What is the median of the stream [12,14,36,54][12, 14, 36, 54] after inserting all elements?

A.

25.0

B.

29.0

C.

36.0

D.

14.0


1 / 3

Figure it out!

We have a game for you to play. Rearrange the logical building blocks to develop a clearer understanding of how to solve this problem.

Sequence - Vertical
Drag and drop the cards to rearrange them in the correct sequence.

1
2
3
4

Try it yourself

Implement your solution in main.js in the following coding playground. We have provided some useful code templates in the other files that you may build on to solve this problem.

JavaScript
usercode > median_of_stream.js
import { MinHeap, MaxHeap } from './Heap.js'
/* The following definition is for MinHeap.
You can use the same methods for MaxHeap.
class MinHeap {
size(); // return number of elements
peek(); // return top element without removing
push(val); // insert element
pop(); // remove and return top element
}
*/
class medianOfStream {
constructor() {
// Write your code here
}
// This function should take a number and store it
insertNum(num) {
// Write your code here
}
// This function should return the median of the stored numbers
findMedian() {
// Replace this placeholder return statement with your code
return 0.0
}
}
export default medianOfStream;
Find Median from Data Stream