0. 题目

一、大根堆(负数)+小根堆
class Solution:
import heapq
def medianSlidingWindow(self,nums, k):
n = len(nums)
if not nums: return []
if k>=n:
nums.sort()
if n%2==1: # 0 0 0 l=3 0 0 l=2
return [nums[n//2]]
else:
return [(nums[n//2-1]+nums[n//2])/2]
q = [(nums[_],_) for _ in range(k)] #小根堆
q = sorted(q,key=lambda x:x[0])
# 大根堆
q1 = q[:k//2] #如果是奇数,q1的长度<q2的长度
q1 = [(-x, i) for x, i in q1]
heapq.heapify(q1)
# 小根堆
q2 = q[k//2:]
heapq.heapify(q2)
if len(q1)==len(q2):
res = [(-q1[0][0]+q2[0][0])/2]
else:
res = [q2[0][0]]