从别人博客里拷来的,转载过来只是方便以后跳槽的时候多点准备
第一题,介绍熟悉的排序算法。
由于对这个不是特别了解,之前看百度百科介绍过,记下来了几种,说了三种吧,然后gg狂问时间复杂度。感觉百度很关注这个,真实狂问时间复杂度啊
第二题:已经排序两个正整数数组,等长,如何找到两个数组里面全部数的中位数。
想了一会,想到直接查找每个数组的中间数,然后比较,如果不等的话,向相应的方向移动数组,每次移动一位。gg问了下时间复杂度,然后让我找到复杂度更低的算法。后来想到了二分查找!其实这道题的关键就是二分查找!第一反映没到位,不过想到二分查找时,却没搞明白查找终止的条件。这个应该给自己减了不少分。
第三题 两个文件各存50亿个url,求两个文件里同时出现的url。
说了句最简单的方法,逐个查找,逐个匹配,就像字符串匹配那样。后来gg说如果考虑内存应该怎么办,其实这道题我之前见过,但是gg也没描述清楚吧,应该还有内存是多少,每个url多少字节之类的信息,不过我也没细问,想了一会,说用hash表,之前看面经的时候说用hash表,就表达了我的意思,但是具体如何操作,我就云里雾里的说了一通,因为我着实对hash表不是很熟悉,从来没用过,最多算是了解吧。
第四题 gg说是经典的字符串反转问题
我说简单的方法,开辟一个新字符b,b=a[last],a[1]=b,a[last]=b,然后依次类推。
后来说,句子里面的单词反转,这个我答的很糟糕,因为之前看过一个类似的题,就按照之前的思路想了下去,后来发现是不节约空间的,复杂度很高。
第五题 字典查找问题,给定一个英文字典,给出12个不重复的字母,如果字典里的单词由这12个字母或12字母里面的某几个字母组成,则把此单词跳出来。
给出的第一个思路是用不同的质数代替不同单词,然后算每个单词的成绩,和12字母所有可能组合单词所对应的质数乘积,最后用质数成绩匹配。
后来我又提出可以用排序组成。gg果断说还是用排序吧。
我说每个字母按照一定顺序排列,12个字母按照相同的顺序排序,然后逐个匹配,期间gg说了不考虑字母重复问题,使得问题简单不少。