-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy path295.py
29 lines (25 loc) · 1.05 KB
/
295.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# https://neetcode.io/problems/find-median-in-a-data-stream
# https://leetcode.com/problems/find-median-from-data-stream/description/
import heapq
class MedianFinder:
def __init__(self):
self.maxHeap = [] # first half [1.0]
self.minHeap = [] # last half [] 0.5
def addNum(self, num: int) -> None:
if len(self.maxHeap) <= len(self.minHeap):
if self.minHeap and self.minHeap[0] < num:
heapq.heappush(self.maxHeap, -heapq.heappop(self.minHeap))
heapq.heappush(self.minHeap, num)
else:
heapq.heappush(self.maxHeap, -num)
else:
if -self.maxHeap[0] > num:
heapq.heappush(self.minHeap, -heapq.heappop(self.maxHeap))
heapq.heappush(self.maxHeap, -num)
else:
heapq.heappush(self.minHeap, num)
def findMedian(self) -> float:
if len(self.maxHeap) > len(self.minHeap):
return -self.maxHeap[0]
else:
return (self.minHeap[0] - self.maxHeap[0]) / 2