阿里巴巴面试题目引入:http://topic.csdn.net/u/20091024/12/989417aa-60e9-45d1-a96f-a623695fc6d7.html?31636
1. 有无序的实数列V[N],要求求里面大小相邻的实数的差的最大值,关键是要求线性空间和线性时间
2. 25匹赛马,5个跑道,也就是说每次有5匹马可以同时比赛。问最少比赛多少次可以知道跑得最快的5匹马
3. 有一个函数int getNum(),每运行一次可以从一个数组V[N]里面取出一个数,N未知,当数取完的时候,函数返回NULL。现在要求写一个函数int get(),这个函数运行一次可以从V[N]里随机取出一个数,而这个数必须是符合1/N平均分布的,也就是说V[N]里面任意一个数都有1/N的机会被取出,要求空间复杂度为O(1)
第二题:
这是一个策略题,由于其只取最快的马匹,可以理解为贪心算法,每次都选用参加次数最少的马匹进行比赛。
现在举例进行说明:
比如现在有五匹马,赛场每次只允许两匹马同时进行比赛,请问最少举行多少场比赛,可以抉择出最快的马儿?
现在我们标记这五匹马为:
1------2------3------4------5
首先选择1------2,3------4进行两场比赛,同时可以淘汰1------2,3------4两场中各一匹
为了说明问题,可以假设优胜马匹为1,4
那么剩余马匹为1(1),4(1),5(0)
下面选择三个马匹中的比赛场次最少的进行比赛
所以下场比赛一定有5,从1,4中任选一个,假定为4
3:4<------>5 假定优胜为4
此时再举行一次就可以选出优胜的马匹。
由上面的推导,共需要(r为比除后的余数+商):
[5/2]=2------r=3
[3/2]=1------r=2
[2/2]=1------r=1
获得最快的马匹,所以共需 2+1+1=4场比赛。
针对题目数据:
[25/5]=5-----r=5+0=5
[5/5]=1------r=1+0=1
所以共需6场比赛。