这是我昨天被问到的面试问题。任何专家都可以向我核实哪些索赔是真的吗?
如果我们有一个算法给出带有3n
个不同元素的未排序数组并计算两个值,x < y
使n
个元素低于x
,{{1元素大于n
,n个元素介于y
和x
之间。
声明A)有一个y
平均顺序的算法来解决这个问题 问题 声明B)有一个O(n)
阶的算法。 声明C)除了输入数组之外还假设O(n)
额外存储,我们无法在多边形时间内解决这个问题。 声明D)解决此问题的每个算法都有O(1)
次序。
答案 0 :(得分:4)
O(n)
时间解决方案,使用selection algorithm。
找到n+1
最小元素和2n
最小元素,这些是您寻找的必需元素。
选择算法的每个调用都是O(n)
最坏情况(中位数方法的中位数),你需要其中的两个,所以复杂度仍为O(n)
。
所以,
O(n)
。Omega(nlogn)
的算法答案 1 :(得分:0)
我不确定你的问题到底是什么,但据我所知,你需要对数组O(n log n)
进行排序,然后你就可以轻松地对其进行分区。
所以我猜D是正确的吗?
答案 2 :(得分:0)
这是一个着名的问题。如果您知道stl,则可以使用nth_element
。您可以在<algorithm>
。