美文网首页
中位数问题

中位数问题

作者: madao756 | 来源:发表于2020-03-12 11:27 被阅读0次

    0X00 总结

    class Solution:
        def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
    
            def findKth(left1, left2, k):
                if left1 == len(nums1): return nums2[left2 + k - 1]
                if left2 == len(nums2): return nums1[left1 + k - 1]
                if k == 1: return min(nums1[left1], nums2[left2])
                halfK = k // 2
                mid1, mid2 = left1 + halfK - 1, left2 + halfK - 1
                if mid1 >= len(nums1):
                    return findKth(left1,mid2+1, k - halfK)
                elif mid2 >= len(nums2):
                    return findKth(mid1+1, left2, k - halfK)
                
                if nums1[mid1] >= nums2[mid2]:
                    return findKth(left1, mid2+1, k - halfK)
                else:
                    return findKth(mid1+1, left2, k - halfK) 
    
            sums = len(nums1) + len(nums2) 
            if sums & 1 == 0:
                # 偶数
                return (findKth(0, 0, sums // 2) + findKth(0, 0, sums // 2 + 1)) / 2
            else:
                return findKth(0, 0, sums // 2 + 1)
    

    二分法去做, 每次删除一个列表的元素

    最大堆与最小堆去做, 保持两个堆之间的流动性

    class MedianFinder:
    
        def __init__(self):
            """
            initialize your data structure here.
            """
            self.minHeap = []
            self.maxHeap = []
    
        def addNum(self, num: int) -> None:
            # 只要涉及插入就必须保持数据在两个堆之间的流动
            # 只要我选择
            # 长度相等的时候插入最大堆, 长度不等的时候插入最小堆,就能保证两堆不会超过 1
            if len(self.minHeap) == len(self.maxHeap):
                heapq.heappush(self.maxHeap, -heapq.heappushpop(self.minHeap, num))
            else:
                heapq.heappush(self.minHeap, -heapq.heappushpop(self.maxHeap, -num))
    
        def findMedian(self) -> float:
            if len(self.minHeap) == len(self.maxHeap):
                return (self.minHeap[0] - self.maxHeap[0]) / 2
            else:
                return -self.maxHeap[0] 
    

    相关文章

      网友评论

          本文标题:中位数问题

          本文链接:https://www.haomeiwen.com/subject/lwgyjhtx.html