阿里巴巴历年笔试面试70题 [6-10]
2015-05-29 14:22
435 查看
6、25匹赛马,5个跑道,也就是说每次有5匹马可以同时比赛。问最少比赛多少次可以知道跑得最快的5匹马。
将马分成A、B、C、D、E五组。
第1-5次比赛:各组分别进行比赛,决出各组名次
A1、A2、A3、A4、A5,
B1、B2、B3、B4、B5,
。。。。
。。。。。。E4、E5。
第6次比赛:A1、B1、C1、D1、E1,
第一名是跑的最快的。
第7次比赛:将上次第一名所在组的下一号马再和剩余的4匹1号马比赛,
第一名是跑的第二快的马,由于只有4个名额,所以跑的最慢的马和所在组剩余的马全部被淘汰。
第8次比赛:将上次第一名所在组的下一号马、上次第二名所在组的下一号马和剩余的3匹马比赛,
第一名是跑的第三快的马,由于只有3个名额,所以跑的最慢的两匹马和所在组剩余的马全部被淘汰。
在剩下的比赛中分别淘汰慢的,将排名稍后的加进来比赛,最多跑到第10次就可以选出最快的5匹马。如果在某一次比赛中排名前几的是同一组的且和已经选出的马加一起大于等于5,就可以提前决出前5名。
所以8-10次就可以选出最快的5匹马。
7、有一个函数int getNum(),每运行一次可以从一个数组V
里面取出一个数,N未知,当数取完的时候,函数返回NULL。现在要求写一个函数int get(),这个函数运行一次可以从V
里随机取出一个数,而这个数必须是符合1/N平均分布的,也就是说V
里面任意一个数都有1/N的机会被取出,要求空间复杂度为O(1)。
from: http://www.csdn123.com/html/blogs/20130910/67362.htm
解法:设置一个整形num,用来存放get()返回的数。调用getNum()从V
取数,按一定概率存入num中(覆盖以前的),直到getNum()返回NULL。设getNum取的第i个数为numi,numi存入num中的概率为Pi。设Pi=1/i
( i已知时,所以这个概率很容易做到)。则numi保留,并最后返回的情况是,numi被存入num中,且numj(i<j<=N)不被存入num。其概率为:P(numi)=Pi*(1- Pi+1) * (1 - Pi+2)* ...(1 - PN)=1/i * (i/(i+1)) * ((i+1)/(i+20)*....((N-1)/N) = 1/N。
8、给定一段产品的英文描述,包含M个英文字母,每个英文单词以空格分隔,无其他标点符号;再给定N个英文单词关键字,请说明思路并编程实现方法
String extractSummary(String description,String[] key words)
目标是找出此产品描述中包含N个关键字(每个关键词至少出现一次)的长度最短的子串,作为产品简介输出。(不限编程语言)。
点评:扫描过程始终保持一个[left,right]的range,初始化确保[left,right]的range里包含所有关键字则停止。然后每次迭代:
1). 试图右移动left,停止条件为再移动将导致无法包含所有关键字。
2). 比较当前range's length和best length,更新最优值。
3). 右移right,停止条件为使任意一个关键字的计数+1。
4). 重复迭代。
编程之美有最短摘要生成的问题,与此问题类似,读者可作参考。
9、一个HTTP服务器处理一次请求需要500毫秒,请问这个服务器如何每秒处理100个请求。
多线程?
10、三次握手
将马分成A、B、C、D、E五组。
第1-5次比赛:各组分别进行比赛,决出各组名次
A1、A2、A3、A4、A5,
B1、B2、B3、B4、B5,
。。。。
。。。。。。E4、E5。
第6次比赛:A1、B1、C1、D1、E1,
第一名是跑的最快的。
第7次比赛:将上次第一名所在组的下一号马再和剩余的4匹1号马比赛,
第一名是跑的第二快的马,由于只有4个名额,所以跑的最慢的马和所在组剩余的马全部被淘汰。
第8次比赛:将上次第一名所在组的下一号马、上次第二名所在组的下一号马和剩余的3匹马比赛,
第一名是跑的第三快的马,由于只有3个名额,所以跑的最慢的两匹马和所在组剩余的马全部被淘汰。
在剩下的比赛中分别淘汰慢的,将排名稍后的加进来比赛,最多跑到第10次就可以选出最快的5匹马。如果在某一次比赛中排名前几的是同一组的且和已经选出的马加一起大于等于5,就可以提前决出前5名。
所以8-10次就可以选出最快的5匹马。
7、有一个函数int getNum(),每运行一次可以从一个数组V
里面取出一个数,N未知,当数取完的时候,函数返回NULL。现在要求写一个函数int get(),这个函数运行一次可以从V
里随机取出一个数,而这个数必须是符合1/N平均分布的,也就是说V
里面任意一个数都有1/N的机会被取出,要求空间复杂度为O(1)。
from: http://www.csdn123.com/html/blogs/20130910/67362.htm
解法:设置一个整形num,用来存放get()返回的数。调用getNum()从V
取数,按一定概率存入num中(覆盖以前的),直到getNum()返回NULL。设getNum取的第i个数为numi,numi存入num中的概率为Pi。设Pi=1/i
( i已知时,所以这个概率很容易做到)。则numi保留,并最后返回的情况是,numi被存入num中,且numj(i<j<=N)不被存入num。其概率为:P(numi)=Pi*(1- Pi+1) * (1 - Pi+2)* ...(1 - PN)=1/i * (i/(i+1)) * ((i+1)/(i+20)*....((N-1)/N) = 1/N。
int GetRand() { int i=1; int nRet = 0; int nVal = 0; while((nRet=getNum())!=NULL) { if(rand()%(i++)==0) nVal = nRet; } return nVal; }
8、给定一段产品的英文描述,包含M个英文字母,每个英文单词以空格分隔,无其他标点符号;再给定N个英文单词关键字,请说明思路并编程实现方法
String extractSummary(String description,String[] key words)
目标是找出此产品描述中包含N个关键字(每个关键词至少出现一次)的长度最短的子串,作为产品简介输出。(不限编程语言)。
点评:扫描过程始终保持一个[left,right]的range,初始化确保[left,right]的range里包含所有关键字则停止。然后每次迭代:
1). 试图右移动left,停止条件为再移动将导致无法包含所有关键字。
2). 比较当前range's length和best length,更新最优值。
3). 右移right,停止条件为使任意一个关键字的计数+1。
4). 重复迭代。
编程之美有最短摘要生成的问题,与此问题类似,读者可作参考。
9、一个HTTP服务器处理一次请求需要500毫秒,请问这个服务器如何每秒处理100个请求。
多线程?
10、三次握手
相关文章推荐
- 优秀程序员的故事
- 阿里巴巴历年笔试面试70题 [1-5]
- 春雨医生面试
- 面试题3:二维数组中的查找
- 面试题2:实现singleton模式
- HR筒子说:程序猿面试那点事(转)
- 面试题1:赋值运算符函数
- 向中级程序员进击之路
- 微软100题(39)几道网易有道面试题
- 黑马程序员——数组、常见排序
- 十年程序员
- 自己总结的一些三大框架面试题
- wifi 万能钥匙面试题目
- 职场情商“知多少”?
- 阿里巴巴历年笔试面试70题
- 微软100题(38)几道百度面试题
- 黑马程序员- java中的排序
- HR筒子说:程序猿面试那点事
- 【黑马程序员】------java基础语法--关键字、变量、常量、运算符
- 黑马程序员——反射Reflection