Algorithm 查找数组的中间元素

Algorithm 查找数组的中间元素,algorithm,Algorithm,可能重复: 大家好, 我在面试中遇到了一个问题 问题: 整数数组将作为输入,您应该在排序时找到中间元素,但不进行排序 比如说 输入:1,3,5,4,2 产出:3 对给定的输入数组进行排序时,它将是1,2,3,4,5,其中中间元素是3 您应该在一次传递中找到它,而无需排序 有什么解决办法吗?对我来说,听起来你可以直接使用-不知道这是不是一个可以接受的答案。这是一个O(n)问题 编辑:但如果您确定项目是连续的,您可以计算最小值、最大值和元素数(在一次过程中),并返回[最小值+(最大值-最小值+1)

可能重复:

大家好, 我在面试中遇到了一个问题

问题:

整数数组将作为输入,您应该在排序时找到中间元素,但不进行排序

比如说

输入:1,3,5,4,2

产出:3

对给定的输入数组进行排序时,它将是1,2,3,4,5,其中中间元素是3

您应该在一次传递中找到它,而无需排序


有什么解决办法吗?

对我来说,听起来你可以直接使用-不知道这是不是一个可以接受的答案。

这是一个O(n)问题

编辑:但如果您确定项目是连续的,您可以计算最小值、最大值和元素数(在一次过程中),并返回[最小值+(最大值-最小值+1)/2]

您可以使用“修改的”快速排序来查找它。它以O(n^2)运行,但平均速度应该相当快。您要做的是每次选择轴时,检查有多少元素小于轴,有多少元素大于轴。如果存在小于或大于轴的相同图元,则轴为中间带。如果不是,则只能递归到包含元素的部分。在最坏的情况下,您将执行完整的排序

例如:

数组有7个元素,我们正在寻找第4个最小元素

53886719

假设quicksort选择3作为轴,您将得到:

1358679

现在,您需要子数组中第二个最小的[5,8,6,7,9]。继续,直到枢轴是您在当前迭代中搜索的第k个最小值


我认为这个解决方案非常适合面试问题,尽管你应该提到有一个O(n)确定性解决方案。

是否有其他限制,元素的数量将是奇数?重复的。这是否总是一个从1到n的n个连续数字的序列?应使用C语言。是的,元素的数量将是奇数。不,这不是一个序列。可以是任何顺序,如100,9,35,7,23,输出将是23No,它不是连续的。可以是任何订单。比如34,19,45,12,2,答案应该是19@senthil,这样我的第一个答案就是你想要的,阅读并搜索它来理解它。