Hulu 2013北京地区校招笔试题

填空题:

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

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

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

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

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

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

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

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

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

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

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

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

7、    无向图G20条边,有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…..nn个数进栈,有多少种出栈顺序,写出递推公式(写出通项公式不得分)

从最简单开始递推,找出规律。令f[n]表示n个数进栈时,出栈顺序的个数。另外为1-n个数编号分别为a,b,c,d… n=1时,f[1]=1,n=2时,f[2]=2,n=3时,c出栈的位置可能在12或者3.当在1时,剩下的是n=2的子问题,也就是f[2];当在2时,剩下的是两个n=1的子问题,也就是f[1]*f[1];n3时,剩下的又是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[n]=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检测第一位bit1的,第二个agent检测第二位bit1的,依次类推其他bit,最后根据返回false的位置为1,返回OK的位置为0,就可以得出出故障的位置的2进制编码。

这里的问题扩展成可以进行两轮实验。那么采用的方法是对每个位置对应到从1-100000的三进制编码,则总共需要log3100000上取整个位,然后第一个agent检测第一位为2的,第二个agent检测第二位为2的,依次类推其他位,当第一轮检测结束时,我们只能知道出故障的位置对应的三进制编码哪些位是2,其他未知的位可能为1或者0,下面进行第二轮检测(就递归到上面的基本问题):把那些返回OKagent再一起检测相应位上为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,作业一旦被调度则不能中断,如果作业ajdj前完成,则获得效益pj,否则无效益。给出最大化效益的作业调度算法

应该用动态归纳。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值