Python中使用Max-Heap和Min-Heap来查找运行中位数的方法如下:
import heapq
max_heap = [] # Max-Heap,存储较小的一半元素
min_heap = [] # Min-Heap,存储较大的一半元素
def insert(num):
if len(max_heap) == len(min_heap):
heapq.heappush(max_heap, -num) # 将元素的相反数插入Max-Heap
heapq.heappush(min_heap, -heapq.heappop(max_heap)) # 将Max-Heap的最大元素插入Min-Heap
else:
heapq.heappush(min_heap, num) # 将元素插入Min-Heap
heapq.heappush(max_heap, -heapq.heappop(min_heap)) # 将Min-Heap的最小元素插入Max-Heap
def get_median():
if len(max_heap) == len(min_heap):
return (-max_heap[0] + min_heap[0]) / 2 # 如果元素总数为偶数,取两个堆顶元素的平均值
else:
return min_heap[0] # 如果元素总数为奇数,取Min-Heap的堆顶元素
insert(5)
insert(10)
insert(2)
median = get_median()
print(median) # 输出:5.0
这种方法通过维护一个较小的一半和一个较大的一半元素的堆,可以在O(log n)的时间复杂度内插入元素和获取中位数。它适用于需要高效查找中位数的场景,比如实时数据流分析、排序算法等。
推荐的腾讯云相关产品:腾讯云云服务器(CVM)、腾讯云数据库MySQL版、腾讯云对象存储(COS)。
腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm 腾讯云数据库MySQL版:https://cloud.tencent.com/product/cdb_mysql 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
领取专属 10元无门槛券
手把手带您无忧上云