
g0201_0300.s0295_find_median_from_data_stream.MedianFinder.py Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-all Show documentation
Show all versions of leetcode-in-all Show documentation
104 LeetCode algorithm problem solutions
The newest version!
# #Hard #Top_100_Liked_Questions #Sorting #Two_Pointers #Design #Heap_Priority_Queue #Data_Stream
# #Big_O_Time_O(n*log_n)_Space_O(n) #2024_06_08_Time_351_ms_(89.30%)_Space_38.5_MB_(42.35%)
import heapq
class MedianFinder:
def __init__(self):
# max_heap stores the lower half (as a max-heap)
# min_heap stores the upper half (as a min-heap)
self.max_heap = []
self.min_heap = []
def addNum(self, num: int) -> None:
if not self.max_heap or -self.max_heap[0] > num:
heapq.heappush(self.max_heap, -num)
else:
heapq.heappush(self.min_heap, num)
# Balance the heaps if their sizes differ by more than one
if len(self.max_heap) > len(self.min_heap) + 1:
heapq.heappush(self.min_heap, -heapq.heappop(self.max_heap))
elif len(self.min_heap) > len(self.max_heap) + 1:
heapq.heappush(self.max_heap, -heapq.heappop(self.min_heap))
def findMedian(self) -> float:
if len(self.max_heap) > len(self.min_heap):
return -self.max_heap[0]
elif len(self.min_heap) > len(self.max_heap):
return self.min_heap[0]
else:
return (-self.max_heap[0] + self.min_heap[0]) / 2.0
# Your MedianFinder object will be instantiated and called as such:
# obj = MedianFinder()
# obj.addNum(num)
# param_2 = obj.findMedian()
© 2015 - 2025 Weber Informatics LLC | Privacy Policy