有一个小白程序员,写了一个只能对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次
从浏览器输入URL到展示页面的全流程是怎么样的?
北京有一条1公里长的街道,你认为一天能收多少钱的停车费?
cookies,sessionStorage 和 localStorage 的区别?
如果你是一个100w日活的UGC短视频APP产品经理,你觉得此时是做分享视频打水印重要,还是优化播放器让视频播放更加顺畅重要?
我还是个菜鸟
另一种思路:
赛马问题的变形: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次