我有N键。
我需要找到一个数据结构,我可以通过以下操作来完成:
在O(N)中构建
在O(1)
删除O(logn)中的中位数
找到n / 2 + 7的最大数字
我想过使用最小堆(构建是O(n),最小是O(1) - root)。
然而,我很难找到办法做3和4。我认为中位数假定是在叶子上,但就我达到的那样。
答案 0 :(得分:1)
当你说在O(n)中构建时,你的意思是加法必须是O(n),或者你必须在O(n)中构建一个元素集合,这样加法必须是O(1) )?
你可以使用额外的引用来扩充任何数据结构,以便在恒定时间内检索最小元素。
对于#3,听起来你需要能够在O(lg n)中找到中位数并在O(1)中删除,反之亦然。
对于#4,您没有指定时间复杂度。
到其他海报 - 这被标记为家庭作业。请提供提示而不是发布答案。
答案 1 :(得分:1)
数据结构1中的一个热门问题:考试/ hws /教程。 我会尝试给你一些提示,如果它们不够,请评论,我会给你更多提示。
答案 2 :(得分:0)
简单排序数组可以解决#2#3和#4的问题。但它的构造需要O(n n )。但是,对空间复杂性没有任何限制。我正在努力在数据结构的构建过程中使用Hashing概念,这会将顺序降低到O(n)。
希望这会有所帮助。如果我找到更好的解决方案,我会回来的