当前位置: 首页 > 知识库问答 >
问题:

找到5个元素的中位数

燕正卿
2023-03-14

以下问题是在最近的一次微软采访中提出的

给定一个大小为 5 的未排序数组。需要多少个最小比较才能找到中位数?然后他把它扩展为n号。

根据我的说法,5个元素的解是6

1) use 3 comparisons to arrange elements in array such that a[1]<a[2] , a[4]<a[5] and a[1]<a[4]
a) compare a[1] and a[2] and swap if necessary
b) compare a[4] and a[5] and swap if necessary 
c) compare a[1] and a[4].if a[4] is smaller than a[1] , then swap a[1] wid a[4] and a[2] wid a[5]
2)if a[3]>a[2].if a[2]<a[4] median value = min(a[3],a[4]) else median value=min(a[2],a[5]) 
3)if a[3]<a[2].if a[3]>a[4] median value = min(a[3],a[5]) else median value=min(a[2],a[4]) 

这可以扩展到n个元素。如果不是,除了快速选择之外,我们如何在O(n)中的n个元素中找到中位数

共有1个答案

曹伟泽
2023-03-14

选择算法将列表划分为五个元素的组。(剩余的元素暂时被忽略。然后,对于每组五个值,计算中位数(如果可以将五个值加载到寄存器中并进行比较-至少6个比较),则可以非常快速地进行此操作)。然后,在此 n/5 个元素的子列表中递归地调用 Select,以找到它们的真实中位数。

 类似资料:
  • 本文向大家介绍5亿个int找到它们的中位数?相关面试题,主要包含被问及5亿个int找到它们的中位数?时的应答技巧和注意事项,需要的朋友参考一下 将2^32个数表示划分为2^16个区域,然后读取数据统计落在各个区域里的数的个数,之后就可以根据统计结果判断中位数落在哪个区域,同时知道这个区域中的第几大数刚好是中位数,然后第二次扫描只用统计这个区域中的那些数就可以    

  • 问题内容: 在我的一项测试中,我正在使用定位元素: 匹配查询的元素不止一个,但是由于我只需要第一个元素,选择器就可以了。 问题是,抛出警告: 警告-为定位器By.cssSelector(“ ul.nav button”)找到了多个元素-将使用第一个结果 是否可以取消警告?换句话说,如何让我知道自己已意识到问题并且不希望再显示警告? 使用开发版本(直接从master分支安装)。 问题答案: 尝试以下

  • 我已经写了下面的代码来选择单选按钮,它的工作很好,但今天它不工作了。请找到代码和相应的错误消息 代码1: 错误1:“线程”main“org.openqa.selenium.TimeoutException中出现异常:等待存在由:By.id:0_2485a_startdate定位的元素10秒后超时” 代码2: 错误2:“线程”main“org.openqa.selenium.TimeoutExcep

  • 问题内容: 基本上,我只需要获取一个5位数的数字,并用空格分隔即可。5位数字可以在varchar中的任何位置。 示例:我在SQL 2008表中有一个varchar列,其中包含这些各种数据 5位数字可以在任何空格之间分隔的地方,什么是最好的提取方法呢? 谢谢 这样的行应返回空白 在没有运气的情况下尝试了以下内容 我想我需要结合使用对varchar中的空间数量进行计数。和以上。但我不确定该怎么做 问题

  • 目前我正在做一项与多边形相关的工作。多边形可以描述为几个顶点。 现在,我有一些多边形已经矢量 一种方法可以告诉我,一个点在哪个多边形内 我需要设置返回的多边形的颜色。 我的第一个问题是如何知道返回的多边形是否在向量内 我的第一个想法是使用无序的集合和比较(vertex.begin(),vertex)。end())。我不知道是否有更好的主意。 另一个问题是某些多边形可能包含相同的边。如何设计数据结构

  • 问题内容: 如何确定切片中存在的元素的位置? 我需要以下内容: 问题答案: 抱歉,没有通用库函数可以执行此操作。Go并没有直接的方法来编写可以在任何片段上运行的函数。 您的函数可以运行,尽管如果使用编写它会更好一些。 如果碰巧有一个字节片,则为bytes.IndexByte。