Leetcode 295. Find Median from Data Stream
Explanation for Leetcode 295 - Find Median from Data Stream, and its solution in Python.
Problem
Leetcode 295 - Find Median from Data Stream
Example:
1
2
3
4
5
6
7
8
9
10
11
12
Input
["MedianFinder", "addNum", "addNum", "findMedian", "addNum", "findMedian"]
[[], [1], [2], [], [3], []]
Output
[null, null, null, 1.5, null, 2.0]
Explanation
MedianFinder medianFinder = new MedianFinder();
medianFinder.addNum(1); // arr = [1]
medianFinder.addNum(2); // arr = [1, 2]
medianFinder.findMedian(); // return 1.5 (i.e., (1 + 2) / 2)
medianFinder.addNum(3); // arr[1, 2, 3]
medianFinder.findMedian(); // return 2.0
Approach
We can simply sort the array, and return the median of the array when we’re finding median.
Here is the Python code for the solution:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class MedianFinder:
def __init__(self):
self.arr = []
heapq.heapify(self.arr)
def addNum(self, num: int) -> None:
self.arr.append(num)
def findMedian(self) -> float:
self.arr.sort()
if len(self.arr) % 2 == 0:
return (self.arr[len(self.arr)//2] + self.arr[len(self.arr)//2-1])/2
else:
return (self.arr[len(self.arr)//2])
Time Complexity and Space Complexity
Time Complexity: $O(m * log n)$ for findMedian(), and O(1) for addNum()
Space Complexity: $O(n)$
This post is licensed under CC BY 4.0 by the author.