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,我开始的答案是10次,后来看到网上说最坏情况为8次,方法如下:
25匹马最少比赛6次(当E1>max(A2,B2,C2,D2))
A1,A2,A3,A4,A5
B1,B2,B3,B4,B5
C1,C2,C3,C4,C5
D1,D2,D3,D4,D5
E1,E2,E3,E4,E5
E1,A2,B2,C2,D2
最坏情况比赛8次
A1,A2,A3,A4,A5
B1,B2,B3,B4,B5
C1,C2,C3,C4,C5
D1,D2,D3,D4,D5
E1,E2,E3,E4,E5
A2,B2,C2,D2,E2
A4,B2,C1,D1,E1
if(max(1)==B2)
{
if(max(2)!=A4) max(2),B3,A3
}
else if(max(1)==A4) A4,B1,max(2),A5
else if(max(2)==B2) B2,A3
else if(max(2)==A4) A4,B1
else B1,A2,A3,max(2),max(3)
3,还没有看,等以后再看吧。