0
点赞
收藏
分享

微信扫一扫

[算法导论] 480. 滑动窗口中位数

技术只适用于干活 2022-04-27 阅读 50
python

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]]
  
举报

相关推荐

0 条评论