2012 百度实习生笔试(2)

来源:互联网 发布:网络舆论 社会影响 编辑:程序博客网 时间:2024/06/08 17:33
4、网页爬虫,即从一个网页开始,查找出该页的所有url网址,并进入这些url,如此循环,直到某个时候连接回来或者到某个空白页为止。将这些连接url一一连接起来。为了简单起见,假设每个网页里都只有一个url,从两个网页入口开始,做上述操作,那么将形成两个单向链表。请判断这两个爬虫里有没有相同的url。(大概是这样的)
答案:
其实这就是变相的问,两个单向链表有没有相交。我有两种思路
思路一:如果两个单身链表相交,那么从相交节点开始,后面的节点完全重合,直到链表末尾(这个可以自己画一下,因为是单向链表)。所以用两个指针分别指向两个链表头节点,从头节点开始依次往后直到指向链表末尾,然后判断两个指针是不是指向同一个节点,如果是,那么就有相同的url。
思路二:将其中一个链表(L1)的末尾指向另一个链表(L2)的头节点,然后从L1的头节点开始往后遍历每个节点,并留下访问过的标记。如果有相交,那么肯定会形成一个环,所以如果检测到有环的话,说明有相同的url。
具体思路见我的博文《寻找两个单链表的第一个公共节点》

5. 数组al[0...num-1]可以分为两部分,al[0...mid-1]和al[mid...num-1],并且这两部分都各自有序。请将数组两部分merge(合并),形成一个总体有序的数组,并且要求空间复杂度为O(1)。
答案:
这个题如果没有要求空间复杂度,那么很容易想到用归并排序,但是是要另外开辟一个同样大小的数组,所以不行。其实这个题要求空间复杂度为O(1),就是说不能另外开辟空间,我的方法是将al[mid...num-1]的每个元素插入到al[0...mid-1]里,先在前部分,找到待插入元素的位置,然后将要插入的元素保存到一个变量里,然后从待插入的位置开始把后面的元素依次往后移动一格,腾出位置,最后将保存下来的元素插入到该位置,最终形成一个整体有序的数组。

6. 是一个关于百度搜索中的suggestion的东东,也就是你在搜索框里输入某个字,会有提示相关的语句的下拉列表。比如说输入“北京”,那么会提示“北京地铁”、“北京天安门”... 。请问这是怎么实现的,写出相应的数据结构和思路,要求效率尽可能高,有没有新的方法提高效率。

7、一个长方形框,里面嵌套n个长方形框,这些长方形框只能是全部水平排列或是全部垂直排列,同样里面的长方形框还能嵌套其他长方形框,规则同上,最里面的长方形框内有n个数据(n>=0),垂直化一条线,能穿过的数字序列
(1)求两个数列是否能在一条直线上
(2)求出所有能在一条线上的字符序列(不知道这样解释大家清楚不,有拍照的同学上传张照片,我本想拍叫那监考MM看见了,就一直呆在我旁边,没机会拍)
思路:
(1)判断两个数所属的同一层次的相同矩形框的下一层次矩形框是水平排列的还是垂直排列的,垂直排列在能在一条线上,水平排列则不能。
(2)用回溯算法求出所有在一条直线上的字符串,用两字符串是否在同一直线上进行剪枝操作

8、就是词义相似度
原创粉丝点击