中位数问题
0X00 总结
- 4. Median of Two Sorted Arrays
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)
二分法去做, 每次删除一个列表的元素
- 295. Find Median from Data Stream
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]
推荐阅读
- parallels|parallels desktop 解决网络初始化失败问题
- jhipster|jhipster 升级无效问题
- “精神病患者”的角度问题
- 解决SpringBoot引用别的模块无法注入的问题
- Hive常见问题汇总
- 姚老师互动问答会|姚老师互动问答会 # 问题001(如何更有智慧的和身边人分享金刚智慧())
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- 【教育故事】|【教育故事】 一个“问题学生”的蜕变
- 蓝桥杯试题
- 记录iOS生成分享图片的一些问题,根据UIView生成固定尺寸的分享图片