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,这样我的第一个答案就是你想要的,阅读并搜索它来理解它。