您的位置:首页 > 其它

Hulu 2013北京地区校招笔试题

2015-08-10 15:43 302 查看
填空题:

1、 中序遍历二叉树,结果为ABCDEFGH,后序遍历结果为ABEDCHGF,逆序遍历结果为?

题目应该改为 先序遍历吧! 先序遍历的结果是:FCBADEGH

2、 对字符串HELL0_HULU中的字符进行二进制编码,使得字符串的编码长度尽可能短,最短长度为?

使用哈弗曼编码,最短长度为25

3、 对长度12的有序数组进行二分查找,目标等概率出现在数组的每个位置上,则平均比较次数为?

如果被查找目标一定会出现的话,由于是等概率,所以出现在每个位置上的概率是1/12,计算式为1/12*(1+2*2+3*4+4*5)=37/12

4、 一副扑克(去王),每个人随机的摸两张,则至少需要多少人摸牌,才能保证有两个人抽到同样的花色。

令A、B、C、D依次代表扑克牌中的四种花色,随机抽取的两张牌的花色组合有10种,根据抽屉原理,则至少11个人抽时,才能保证有两个人抽到同样的花色。

5、 x个小球中有唯一一个球较轻,用天平秤最少称量y次能找出这个较轻的球,写出y和x的函数表达式y=f(x)

使用三分法效率最高,y=logx以3为底向上取整。

6、 3的方幂及不相等的3的方幂的和排列成递增序列1,3,4,9,10,12,13……,写出数列第300项

推出规律,令sn表示第n项的值,当n=2^k,sn=3^k,当2^k时,sn=3^k+s[n-2^k]。然后取n=300即可。

7、 无向图G有20条边,有4个度为4的顶点,6个度为3的顶点,其余顶点度小于3,则G有多少个顶点

题目有问题,应该问至少有多少个顶点。每条边可产生2个度,所以总共是40个度 4*4+6*3=34,40-34=6,则至少有4+6+3个点

8、 桶中有M个白球,小明每分钟从桶中随机取出一个球,涂成红色(无论白或红都涂红)再放回,问小明将桶中球全部涂红的期望时间是?

令f[i]表示桶中已经有i个球是红球后,还需要的期望时间,则f[i]=(i/M)*(f[i]+1)+(1-i/M)(f[i+1]+1),且f[M]=0, 递推后计算出f[0]=M(1+1/2+1/3+…+1/M)=M*(lnM+C),其中C为欧拉常数

9、 煤矿有3000吨煤要拿到市场上卖,有一辆火车可以用来运煤,火车最多能装1000吨煤,且火车本身需要烧煤做动力,每走1公里消耗1吨煤,如何运煤才能使得运到市场的煤最多,最多是多少

先装上1000吨,走250公里,放下500吨,回去装上1000吨,走到250公里,装上250吨,继续走250公里,放下250吨,往回走,装上1000吨,走到250公里,装上250吨,继续走250公里,又装上剩下的250吨。然后一直到目的地。

10、1,2,3,4…..n,n个数进栈,有多少种出栈顺序,写出递推公式(写出通项公式不得分)

从最简单开始递推,找出规律。令f
表示n个数进栈时,出栈顺序的个数。另外为1-n个数编号分别为a,b,c,d… 当n=1时,f[1]=1,当n=2时,f[2]=2,当n=3时,c出栈的位置可能在1、2或者3.当在1时,剩下的是n=2的子问题,也就是f[2];当在2时,剩下的是两个n=1的子问题,也就是f[1]*f[1];当n在3时,剩下的又是n=2的子问题,也就是f[2]。所以f[3]=f[2]+f[1]*f[1]+f[2]令f[0]=1,则f[3]=f[0]*[2]+f[1]*f[1]+f[2]*f[0],依次类推f
=f[0]*f[n-1]+f[1]*f[n-2]+…+f[n-1]*f[0]。 这是卡特兰数的递推公式。

11、宇宙飞船有100,000位的存储空间,其中有一位有故障,现有一种Agent可以用来检测故障,每个Agent可以同时测试任意个位数,若都没有故障,则返回OK,若有一位有故障,则失去响应。如果有无限多个Agent可供使用,每个Agent进行一次检测需要耗费1小时,现在有2个小时时间去找出故障位,问最少使用多少个Agent就能找出故障。

这个问题是小白鼠从药瓶中检测出毒药的扩展。基本问题是只能进行一轮实验,找出故障,采用的方法是对每个位置对应到从1-100000的二进制编码,则总共需要log2100000上取整个bit,然后第一个agent检测第一位bit为1的,第二个agent检测第二位bit为1的,依次类推其他bit,最后根据返回false的位置为1,返回OK的位置为0,就可以得出出故障的位置的2进制编码。

这里的问题扩展成可以进行两轮实验。那么采用的方法是对每个位置对应到从1-100000的三进制编码,则总共需要log3100000上取整个位,然后第一个agent检测第一位为2的,第二个agent检测第二位为2的,依次类推其他位,当第一轮检测结束时,我们只能知道出故障的位置对应的三进制编码哪些位是2,其他未知的位可能为1或者0,下面进行第二轮检测(就递归到上面的基本问题):把那些返回OK的agent再一起检测相应位上为1的,当第二轮检测结束,我们就可以知道哪些是1哪些是0.

总共12道填空题,还有一道太复杂,题目很长,还有示意图,看不懂更不会做,没有记录下来。



大题:

1、 n个数,找出其中最小的k个数,写出代码,要求最坏情况下的时间复杂度不能高于O(n
logk)

借助一个大小为k的最大堆,建堆的复杂度为O(k),之后如果每个都和堆的根节点比较并且更新堆,则复杂度是O(nlgk)

2、 写程序输出8皇后问题的所有排列,要求使用非递归的深度优先遍历

3、 有n个作业,a1,a2…..an,作业aj的处理时间为tj,产生的效益为pj,最后完成期限为dj,作业一旦被调度则不能中断,如果作业aj在dj前完成,则获得效益pj,否则无效益。给出最大化效益的作业调度算法

应该用动态归纳。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: