近期工作总结

很久没有更新这个blog了,总是觉得没什么可写的……BS下下自己,惰性又出来了!

首先还是看看近期做了哪些事情吧:从上一次写博到现在已经过去40余天了,写了第二篇论文。然后准备去百度面试……等等!中间大概有十天没有做具体的事情! What‘s a shame! 然后的然后就是面试归来,被鄙视,进入学习linux。

对了,今天就是打算写下百度笔试的题。昨晚冯总和涛哥在讨论笔试的几个题,作为笔试者,我却没有认真想过,失败!先把几道题放上来: 

07年百度川大面试题(简答)

1.有两整数:0<m<n<10^20,求mn之间出现的整数中,012……9各出现多少次。给出你的思路及算法,并实现你的代码,分析该算法的时间复杂度及空间复杂度。

2.Linux32位机下,有10个文件:D1D2……D10,其中每个文件大小都不超过 1G ,每个文件中都按行存储了一个不超过128位的整数(一行只存储一个整数),并且这些整数无序的。现希望给出算法,将这10个文件组成有序文件(即某个文件的最后一个整数要小于该文件后的文件的第一个整数)。给出你的思路及算法,并实现你的代码,分析该算法的时间复杂度及空间复杂度。

 

07年百度成电面试题(简答)

1、给定一个字符串,求其最大不重复子串。

如:abbbdadbcdd 的最大不重复子串为 adbc。给出你的思路及算法,并实现你的代码,分析该算法的时间复杂度及空间复杂度。

2、给定一个字符串,求其最大回文子串。

如:abcdcba的最大回文子串为 abcdcba   abcd的最大回文子串为

给出你的思路及算法,并实现你的代码,分析该算法的时间复杂度及空间复杂度。

以上2题能给出时间复杂度为O(n)的算法么?

3.在32位系统中,对于一个文件中有2.5亿个int型整数,求该文件中出现的整数的个数。如该文件中共出现1.3亿个11.2亿个0,则出现的整数个数为2。设定内存使用为 600M ,给出你的思路及算法,并实现你的代码,分析该算法的时间复杂度及空间复杂度。

这几道题只有川大那道求0-9的个数是当时就有思路的:为所有的数补0,以0-99为例,可以构成如下方块:

00, 01, 02…… 09

10, 11 , 12……19

……

90 , 91, 92……99

这样,该数即可为99个2位数,则共有99×2个数字,且0-9这十个数出现的概率相同,只需计算加0的个数即可。将m划分为整数段,如m=1314,可以划为如下几段:0-999、1000-1299。1300-1309,1310-1314。这样时间复杂度为常数。后来给老板看这道题的时候,老板说:如果求大概的出现次数,很容易的,你去翻翻组合数学,电子科大的一本¥%&(&×%!@#¥……没办法,老板以前学数学的,奥赛高手……

第二题则有点困难,牵涉到外部排序的算法,不过当时有点思路,现在想来,可以将这十个文件分为128个文件(128位的数)。第一个文件存放的是1位数,第二个为2位数。但是当时时间不够,就利用题目上的漏洞耍了下小聪明,估计被BS了……现在想来,按位切分后的每个文件大概不超过10×1G/128<100M。这样对每个文件进行内部排序即可,得到的是128个有序文件,再将这128个文件按顺序组成有序的10个大文件即可。这样将问题简化成100M大小的文件排序。但是这个方法是不是很好,还请路过的博友们来看看。

电子科大的几道题我就晕的很了,尤其是第三题,我没有注意到“32位系统”的那个条件,还在哪里想:嗯,既然int型只有65536个,2.5亿是一个很大滴数字,每个数有很大滴重复可能。那么我建一个树(其实当时就想用map/set容器了……),发现该数则删除,这样该RB树就越来越小,查询logN/log2的N就越来越小,不错不错。出来之后一讨论,那简直瀑布流星汗啊!现在还没相出来什么好方法……

至于回文,如果出现回文字符串的话,那其两端肯定为同一字符,如abababb,则有回文串ababa。我的想法是利用所有出现的字符将其分割成段,在段之间去查找该子串。最大子串也是利用这个方法去想的。后来回来想想,回文用这个还是挺好的,但是最大子串就问题多多了。

后来面试的时候,面无表情的百度哥哥就问我有没得更优秀的算法,又是流星瀑布汗……想了一下,很牛的说:回去之后没想,当时没想出来更好的,现在一时半会估计也不会想出来更好的¥#……%&#&&@×于是该百度GG说:好的,我说下下次可能面试的安排(咦?这就忽悠过去了??)如果通知你面试,则一两天或一两周之内(欣喜ing),如果没进入下一轮面试,也是一两周之内(流行瀑布汗)

总结:这题真TM的绕!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值