Skip to content

Commit b2955b1

Browse files
committed
feat: add solution for find median from data stream in python
1 parent 517cde1 commit b2955b1

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import heapq
2+
3+
class MedianFinder:
4+
5+
def __init__(self):
6+
"""
7+
initialize your data structure here.
8+
"""
9+
self.minHeap = []
10+
self.maxHeap = []
11+
12+
13+
def addNum(self, num: int) -> None:
14+
heapq.heappush(self.maxHeap, -num)
15+
heapq.heappush(self.minHeap, -heapq.heappop(self.maxHeap))
16+
if len(self.maxHeap) < len(self.minHeap):
17+
heapq.heappush(self.maxHeap, -heapq.heappop(self.minHeap))
18+
19+
20+
def findMedian(self) -> float:
21+
if len(self.maxHeap) > len(self.minHeap):
22+
return -self.maxHeap[0]
23+
else:
24+
return (-self.maxHeap[0] + self.minHeap[0]) / 2
25+
26+
27+
medianFinder = MedianFinder()
28+
assert medianFinder.addNum(1) == None
29+
assert medianFinder.addNum(2) == None
30+
assert medianFinder.findMedian() == 1.5
31+
32+
# Your MedianFinder object will be instantiated and called as such:
33+
# obj = MedianFinder()
34+
# obj.addNum(num)
35+
# param_2 = obj.findMedian()

src/readme.md

+1
Original file line numberDiff line numberDiff line change
@@ -103,3 +103,4 @@
103103
- [x] [84. Largest rectangle in histogram](../src/hard/largest_rectangle_in_histogram.rs) -> [Problem Description](../src/hard/readme.md#84-largest-rectangle-in-histogram)
104104
- [x] [212. Word search II](../src/hard/word_search_ii.rs) -> [Problem Description](../src/hard/readme.md#212-word-search-ii)
105105
- [x] [239. Sliding window maximum](../src/hard/sliding_window_maximum.rs) -> [Problem Description](../src/hard/readme.md#239-sliding-window-maximum)
106+
- [ ] [295. Find median from data stream](../src/hard/find_median_from_data_stream.rs) -> [Problem Description](../src/hard/readme.md#295-find-median-from-data-stream)

0 commit comments

Comments
 (0)