Find Median from Data Stream
Explore how to design a data structure in Go that stores integers from a dynamic data stream and finds the median in constant time. Learn to implement insert and median retrieval methods using heap data structures to handle continuous input efficiently.
We'll cover the following...
Statement
Design a data structure that stores a dynamically changing list of integers and can find the median in constant time, MedianOfStream with the following functionality:
Constructor(): Initializes an instance of the class.
insertNum(int num): Adds a new integer
numto 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.,
), the median is the middle element: . For an even-sized list (e.g.,
), the median is the average of the two middle elements: .
Constraints:
num, where numis 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,
calls will be made to the function that calculates the median.
Examples
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
What is the median of the stream after inserting all elements?
25.0
29.0
36.0
14.0
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.
Try it yourself
Implement your solution in main.go 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.
package main// Tip: You may use some of the code templates provided// in the support filestype MedianOfStream struct {// Write your code here}func (this* MedianOfStream) Init() {// Write your code here}// insertNum() should take a number and store itfunc (this* MedianOfStream) InsertNum(num int) float64 {// Replace this placeholder return statement with your codereturn -99.99}// findMedian() should return the median of the stored numbersfunc (this* MedianOfStream) FindMedian() float64 {// Replace this placeholder return statement with your codereturn -99.99}