算法模式:双堆

💡 原文中文,约2200字,阅读约需6分钟。
📝

内容提要

双堆算法通过最小堆和最大堆高效查找数组中位数,最小堆存储较大一半元素,最大堆存储较小一半元素。根据元素数量的奇偶性返回中位数,适用于优先队列和调度问题。

🎯

关键要点

  • 双堆算法通过最小堆和最大堆高效查找数组中位数。

  • 最小堆存储较大一半元素,最大堆存储较小一半元素。

  • 根据元素数量的奇偶性返回中位数。

  • 双堆模式适用于优先队列和调度问题。

  • 中位数是有序整数列表中的中间值,偶数时为两个中间值的平均值。

  • 实现 MedianFinder 类以添加数字并查找中位数。

  • 使用两个堆来存放数据,小顶堆保存较大的一半,大顶堆保存较小的一半。

  • 代码示例展示了如何实现双堆算法。

延伸问答

双堆算法是如何查找数组中位数的?

双堆算法使用最小堆存储较大一半元素,最大堆存储较小一半元素,从而高效查找中位数。

中位数的定义是什么?

中位数是有序整数列表中的中间值,偶数时为两个中间值的平均值。

双堆算法适用于哪些场景?

双堆算法适用于优先队列和调度问题,特别是在需要频繁查找最大、最小或中位数的情况下。

如何实现一个支持查找中位数的类?

可以实现一个MedianFinder类,使用两个堆来存放数据,提供addNum和findMedian方法。

双堆算法的时间复杂度如何?

双堆算法在添加元素和查找中位数时的时间复杂度为O(log n)。

在双堆算法中,如何处理偶数个元素的情况?

当元素数量为偶数时,两个堆的大小相同,中位数为两个堆顶元素的平均值。

➡️

继续阅读