给定数组a1, a2, a3, ... , aN
我想创建一个支持以下要求的数据结构:
我尝试使用3个最大堆构建数据结构,但我无法在O(n)中初始化堆。
我怎么能搞清楚?
答案 0 :(得分:2)
所谓的"median of medians" algorithm 可以在O(n)时间内找到无序集合中的第k个最小元素。 您希望将此应用于k = n / 5和k = 4n / 5.
算法的结果是一个部分有序的数组,其中所需的kth 元素位于k。将第n / 5个元素放在其位置后 我认为有可能将4n / 5元素放在其位置而不必 重新做整个算法,但无论如何它仍然是O(n)。
假设您在数组中有O(1)随机访问查找,那么您的O(1)查找 要求将得到满足。