首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
有一个小白程序员,写了一个只能对5个数字进行排序的函数。现在
[单选题]
有一个小白程序员,写了一个只能对5个数字进行排序的函数。现在有25个不重复的数字,请问小白同学最少调几次该函数,可以找出其中最大的三个数()
5
6
7
8
查看答案及解析
添加笔记
邀请回答
收藏(940)
分享
22个回答
添加回答
125
推荐
大漠孤狼
答案:C
1、25人分5组调用,分别排序,调用5次
2、取出5组中的最大数,排序,调用1次
3、将第2步排序中最大的三组取出,假设为A,B,C,从第二步已知A[1]>B[1]>C[1],不需要再比较,选A[2]、A[3]、B[1]、B[2]、C[1]比较。不需要比较B[3]是因为A[1]已经最大了,若剩下两个数在B中,A[1]占了一个数,只剩两个位置,C[1]同理,轮到C[1]的时候,前面A[1]>B[1]已经占了两个位置。调用1次
总共 5+1+1=7次
编辑于 2016-10-09 10:21:19
回复(12)
48
罗杨
先每5个数一组,分5组比较,得到5个小组最大,在对这5个数比较得到前3大的,分析,最大的那个肯定最大,排在第一位,第二第三的只能出现在一下5个数中(最大组的第2、3位,第二大的组的第1、2位,或者第三大的组的第1位)将这5个数再比较一次得到第2、3。所以共5+1+1=7次
发表于 2015-09-30 12:40:51
回复(0)
10
zt_xcyk
C
先分成五组
测试五次 得到每组前三
五组里面的 第一(假设是 A B C D E)
测一次
得到序列 (假设比较好的序列是 A B C D E)
再从得到最大那一组(A组)的里面取出第二大 X 和第三大 Y ,和第二大数那一组(B组) 取出第二大 Z,把最大五个排好序(A B C D E)里面的 最大(A) 和倒数两个(D E)换掉
现在就是(B Z C X Y)
调用一次
5+1+1=7
编辑于 2015-10-06 19:39:17
回复(11)
6
ahuangliang
答案是7次。
6次比较好理解,不再解释。我们来看为什么要第7次。
5组数中最大的三个,有可能都分布在其中一个组中。因此6次排序实际上只有确认最大的一个数,最后两个不可能
的数
(第6次排序后2位,最少也是第4大和第5大)。
除开平均分布的情况,还有二种情况,一是三个最大的数都在一组,二是有两数在一组。
因此只需要比较最大三组中的前6个数(3,2,1),
注意最大的数已经确定,因此只需要比较5个数。即排序一次。
发表于 2015-10-06 22:11:26
回复(1)
3
sunlight_run
有这样5组数:只列出必要的元素,前面5次调用就不说了
1组
A
X
Y
2组
B
Z
3组
C
4组
D
5组
E
假设第
六次调用后,结果为A>B>C>D>E
A是最大的,现在就是从剩下里面选出次大的两个
1.A最大,可能A后面的X和Y比B都大,所以1组中X和Y应该参与竞选
2.B第二大,如果B参与竞选,说明只剩下最后一个参与竞选的指标了,这是2组顶多Z有竞选资格
3.C第三大,如果C参与竞选,那么3组其他元素均没有资格参与竞选
所以,
参与次大的两个元素应该在(X,Y,B,Z,C
)中产生
,再调用一次就可以了
综上:一共7次
发表于 2017-07-04 20:01:09
回复(0)
2
牛客_1
答案:C
将25分成5组,比较5次,n = 5
取出5组最大的一个数,比较一次, n = 5+1
最后一步最重要,思考下,题目中要求取出最大的三个数,假设前三大的组分别为,A,B,C
A[1]最大,剔除A[1],取出A[2],A[3],A[4]不符合要求剔除,B组取B[1],B[2],C组因为已经有两个数比最大的数大(A[1],B[1]),因此只取一个C[1]
新的组为:A[2],A[3],B[1],B[2],C[1]将这比较,取出前两个数 n= 5+1+1 = 7
发表于 2017-09-25 11:06:30
回复(0)
2
**
这道题琢磨透了就不难了。
首先,将25个数每5个一组,分别调用函数进行排序--一共5次
第二步,拿出5个数组中最大的数,调用一次函数,得到所有数中最大的数max--调用一次
第三步,再将最大数所在数组的次大数,替换掉第二步数组里面的最大数,重新排序,找到所有数次大值--调用一次
第四步,再将第三步数组的最大值所在的第一步时的数组的次大值拿出,放入第三步数组替换次大值,再调用函数一次,即可得所有数的第三大树--调用一次--一共8次
发表于 2017-08-25 16:35:03
回复(0)
2
小溪东流
赛马问题的变形:25匹马,只有5个跑道,决出前3名,最少需要赛几场?
发表于 2017-04-22 09:15:25
回复(2)
2
dragonhaw
答案是C,我选的B。
错误原因:
1.
25人分5组调用,分别排序,调用5次
2、取出5组中的最大数,排序,调用1次
5+1=6次。
未考虑到数组的第二个元素可能是最大的三个数之一。
发表于 2017-04-08 21:17:09
回复(2)
1
醉江楼
另一种思路:
7次
先均分为5组,各组排序,共5次
再取出每组的中位数,排1次,假设结果如下:
A[2]< B[2] < C[2] < D[2] < E[2]
再从C[3]、D[2]、D[3]、E[2]、E[3]这5个数中排序,即可取得前3大的数
所以7=5+1+1
发表于 2016-10-13 20:31:07
回复(0)
3
牛逼轰轰
对于这题,我怎么感觉只需要6次:
1、第一次,首先取出25中的5个数,比较一次,找出最大,然后将最大的放入到剩下的20个中,变成21个;
依次类推:即每次排除四个
2、第二次剩下17个;
3、第三次剩下13个;
4、第四次剩下9个;
5、第五次剩下5个;
6、第六次直接就找出来了。
发表于 2015-10-05 16:58:47
回复(8)
8
philian
先每5个为1组排序,得到5个极大值
再对这5个排序,得到最大的三个数,设为A1>B1>C1
再回去找第一次排序得到的A2、A3、B2,和B1、C1又凑成5个数
A1一定是全局最大值,因此它算最后三个数里的一个,那么还剩下俩位置,这俩位置可能是
A1 B1 C1
A1 A2 A3
A1 A2 B1
A1 B1 B2
因此对A2 A3 B1 B2 C1再做一次排序
一共5+1+1=7
发表于 2016-12-18 17:13:08
回复(1)
0
哼哼~
首先分5类先排序没得说,A,B,C,D,E,然后得到假设Amax>Bmax>Cmax>Dmax>Emax。分情况讨论,如果C队中有排名前三的数,就只能是Cmax,且前三为Amax,Bmax,Cmax。为了方便表示,用下表代表本队中的大小,即A1>A2 ··· ···,第二种情况:A队中的数都比较大,夸张的大,所以前三就是A1,A2,A3。第三种情况:A3的值没有B1大,那么结果就是A1,A2,B1。第四种情况,A队中就队长比较给力,那么前三就是A1,B1,B2。然后得到结论是最大的在A1,A2,A3,B1,B2,C1中,很显然大家都知道A1是大哥,所以就比较后者5个的大小,就能得到第二和第三。
分前三名还是简单的。
发表于 2019-08-31 15:21:33
回复(0)
0
s1162276945
这就是大数据中分桶的思想,啊,多么痛的领悟
发表于 2018-03-19 16:31:48
回复(0)
0
潜力巨大的男人
5*5矩阵,从上到下,从左到右均递减,大数均集中在左上区域,6次排序只能得到左上角一个值,剩下的2个最大值需要从左上角斜向取5个数比较。
发表于 2017-08-25 16:45:04
回复(0)
0
码不停手1
和25匹马在5个跑道决出前三名一样。不过得出前五名最少需要几次呢?
发表于 2017-08-25 10:16:50
回复(0)
0
Tonedoony
一:五组分别调用排序
二:取每组最大值排序,得到数组A;取最大A1;
三:找到A1所在第一次排序数组B取b2,b3,再取第二次排数数组A1,A2,A3进行排序,得到数组C,取C1,C2,C3
发表于 2017-08-24 21:27:57
回复(0)
0
黏黏糖
(1)25个数分五组调用5次,对这五组数进行排序;
(2)取出五组中最大的5个数,进行一次排序;
(3)取出最大的三组,A,B,C,假设A[1]>B[1]>C[1]。此时最大数为A[1],第二大数为A[2]或B[1],第三大数为A[3],B[2]或C[1]。因此,取出A[2],A[3],B[1],B[2],C[1]早调用一次排序。
共调用7次排序。
发表于 2017-06-27 10:20:46
回复(0)
0
sgbs
谁有更容易理解的解释呀 ??
发表于 2017-06-03 08:46:16
回复(0)
0
dragonaxz
一开始分5组调用5次,然后5个组中的最大值也调用一次把5组排好序ABCDE(A拥有最大的最大值),然后可以考虑四种情况:
(1)ABC中的最大值就是解
(2)A的前三大是解
(3)A的前二大和B的最大是解
(4)A的最大和B的前二大是解
A的最大值一定是解之一,
所以最后应对A的第二大第三大,B的前二大和C的最大值排序
编辑于 2016-12-13 14:23:56
回复(0)
0
keglly
注意这里是确定前3,不用确定前5啦~~
发表于 2016-09-03 20:08:27
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
排序
来自:
滴滴出行2016研发工...
难度:
22条回答
940收藏
14961浏览
热门推荐
相关试题
在下列表述中,错误的是()
字符串
树
排序
评论
(43)
请问A市到B市有多长距离
数学运算
评论
(15)
来自
滴滴出行2016研发工程...
一根长度为10000米长的棍子,需...
数学运算
评论
(35)
来自
滴滴出行2016研发工程...
头巾问题
判断推理
评论
(48)
来自
滴滴出行2016研发工程...
电路板布线的时候尽量采用( )折线布线
PCB
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题