【发布时间】:2015-02-25 02:10:30
【问题描述】:
这段摘自Cracking the Coding Interview 5th Edition
数字是随机生成并存储在(扩展)数组中的。如何 你会跟踪中位数吗
作者带我们了解了一个基于heaps的解决方案:
堆非常擅长基本排序和跟踪最大和 分钟。这实际上很有趣 - 如果您可以跟踪 较大的一半和较小的一半元素。较大的一半是 保存在最小堆中,使得较大一半中的最小元素 是根。较小的一半保存在最大堆中,这样 最小一半的最大元素在根。现在有了这些 数据结构,你在根部有潜在的中值元素。” 如果堆大小不再相同,您可以快速“重新平衡” 通过从堆中弹出一个元素并将其推送到堆 另一边
我有几个关于这种方法的问题,我一次问一个问题,以保持其井井有条。 首先,使用这种方法,如果您遍历数组中的元素,您如何知道特定元素属于算法描述的最小堆或最大堆? 假设我们的数据元素是 [20, 39, 14, 7, 86, 90]。当你迭代数组时,你会放什么堆,比如说 20?
【问题讨论】:
标签: java arrays algorithm sorting heap