微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何设计一个 getMedian 并在 O(1) 中插入的数据结构?

如何解决如何设计一个 getMedian 并在 O(1) 中插入的数据结构?

我考虑过在排序数组中执行此操作并保存中位数的索引及其需要 O(1)。但我想不出任何方法在 O(1) 中进行插入并保持数组排序。 如果有人能帮我解决这个问题,我真的很感激

解决方法

您要求的是不可能的,因为它允许在 O(n) 时间内进行基于比较的排序:

  • 假设您有一个长度为 n 的未排序数组。
  • 在 O(n) 时间内找到最小元素和最大元素。
  • 将所有 n 个元素插入数据结构,每次插入需要 O(1) 时间,因此这需要 O(n) 时间。
  • 插入最小元素的 n-1 个额外副本。这也需要 O(n) 时间。
  • 初始化长度为 n 的输出数组。
  • 这样做 n 次:
    • 读取数据结构中当前元素的中位数,并将其写入输出数组的下一个位置。这需要 O(1) 时间。
    • 将最大元素的两个副本插入到数据结构中。这需要 O(1) 时间。

上面的算法应该在 O(n) 时间内运行,结果是输入数组中元素的排序数组。但这是不可能的,因为比较排序需要 Ω(n log n) 时间。因此,假设的数据结构不存在。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。