阿里巴巴面试三题目其二的个人理解

来源:互联网 发布:自己的淘宝等级怎么看 编辑:程序博客网 时间:2024/05/21 17:43

阿里巴巴面试题目引入: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场比赛。

原创粉丝点击