面试问题之赛马
题目描述:
一共有64匹赛马,8个赛道,每次比赛获得上赛道的马匹对应的名次,最少需要几次比赛?
题目分析:
一次比赛可以获得不多于8数量的有序成绩数组;
首先进行8场比赛,可以获得8组有序的成绩数组;
将8组小组在比赛的第一名,再进行一次比赛,此时进行了9场比赛;
综合以上结果,将8个小组按照第一名排列,获得二维成绩数组。
显然,第一名已经确定,同时可以排除小组第一名成绩在第九次比赛后四名的小组和每组的后四名(因为前四名不可能出现在后四名)。
根据如下数组,可以分别划定2,3,4名的出现范围:
图中:每列依次排名,由左至右按第一名排名。
- 第一名已经确定,途中黄色所示。
- 第二名的范围也可确定,途中绿色标识的其中一个
- 第三名可能的范围是绿色标识和蓝色标识相加。
- 第四名范围需要讨论?位置的马是否入选第三名(不可能是第二名),如果蓝色是第三名,那么第四名可能的范围就是绿色+蓝色+粉色+褐色。如果?位置的马不是第三名,第四名的范围就可排除粉色的区域(?的马一定比粉色的快)。
- 所以,?区域是第三名,9匹候选马,跑两轮;?不是第三名,7匹马,跑一轮。
结论
最多需要跑11轮,最少需要跑10轮。