有一个小白程序员,写了一个只能对5个数字进行排序的函数。现在有25个不重复的数字,请问小白同学最少调几次该函数,可以找出其中最大的三个数?
A.5
B.6
C.7
D.8
正确答案是 C
我还是个菜鸟
另一种思路:
赛马问题的变形:25匹马,只有5个跑道,决出前3名,最少需要赛几场?
将25分成5组,比较5次,n = 5
答案是7次。
先每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
先每5个数一组,分5组比较,得到5个小组最大,在对这5个数比较得到前3大的,分析,最大的那个肯定最大,排在第一位,第二第三的只能出现在一下5个数中(最大组的第2、3位,第二大的组的第1、2位,或者第三大的组的第1位)将这5个数再比较一次得到第2、3。所以共5+1+1=7次
列举一款你常用的移动APP,并分析他的最核心功能、满足的需求、超预期的功能以及竞争优势和发展趋势
小程序没有分享到朋友圈的功能,但是产品为了推广,需要曲线实现这个功能,请给出设计方案?
B2C网站上促销价格出错了,如何做危机公关?
怎么理解产品经理与技术研发之间的关系?
我还是个菜鸟
另一种思路:
赛马问题的变形:25匹马,只有5个跑道,决出前3名,最少需要赛几场?
将25分成5组,比较5次,n = 5
答案是7次。
先每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
先每5个数一组,分5组比较,得到5个小组最大,在对这5个数比较得到前3大的,分析,最大的那个肯定最大,排在第一位,第二第三的只能出现在一下5个数中(最大组的第2、3位,第二大的组的第1、2位,或者第三大的组的第1位)将这5个数再比较一次得到第2、3。所以共5+1+1=7次