读书人

今天参加了百度实习生笔试有几道题和

发布时间: 2012-06-02 14:16:14 作者: rapoo

今天参加了百度实习生笔试,有几道题和大家交流交流
最后一个题目答的太2了,我写的是用hash map ,感觉实现suggestion功能应该不是hash 实现的。
请大家谈谈自己的看法

我先且把所有问题奉上:
1.简答题,给出一个单词,找出这个单词所有的变位词。
例如army,mary就是一组变位词,pots stop tops这三个是一组变位词。
要求:写出用到的数据结构,查询流程。

2.简答题,线程和进程的区别,简述什么是“线程安全”。

3.简答题,c和c++如何动态分配和释放内存,以及他们的区别。

4.算法与程序设计题,判断两个单项链表是否相交(有公共节点),这两个链表可以有环。一个链表可能很长(100亿),
不可以用hash map
注:原题描述太长,这个题目本质上就是判断两个单链表是否相交。

5.算法与程序设计题,有al[0,mid-1],al[mid,num-1]两个数组,这两个数组都是排序好的,将这两个数组merge成一个数据。
要求:空间复杂性O(1).

6系统设计题,实现百度的suggestion功能。
要求,写出算法,所用数据结构,尽可能的减少时间空间复杂度,提出优化方法。

[解决办法]

探讨

3.简答题,c和c++如何动态分配和释放内存,以及他们的区别。

还真没觉得有啥区别,莫非是分配内存所在区不一样?

[解决办法]
1.简答题,给出一个单词,找出这个单词所有的变位词。
标注词库所有单词的位数和权值(参照24楼单词的权值为字母权值相乘)
然后首先比较位数,再比较权值
数据结构可能用到multimap

2.简答题,线程和进程的区别,简述什么是“线程安全”。
一个进程可以包含多个线程,线程是共享内存地址空间的,进程则都有自己的地址空间
线程安全应该指的是线程间共用数据吧,同时访问某个数据,有写的时候,需要做同步处理(锁),
不过最好在应用中设计成没有锁的,以避免降低线程的运行效率

3.简答题,c和c++如何动态分配和释放内存,以及他们的区别。
c : malloc/free
c++ : new/delete
区别:c++的有异常处理,且new/delete会调用相关的构造和析构函数

4.算法与程序设计题,判断两个单项链表是否相交(有公共节点),这两个链表可以有环。一个链表可能很长(100亿),
先处理两个链表,如果有环,把环断开(用两个指针,一个1跳,一个2跳,追上的话,追上的节点的前一个节点可以作为链表尾,把其指向置null,追不上的话就是没环,自然就能得到链表尾)
处理完之后,把其中一个链表接到另一个链表后,同样的方法判断有没有环,有环则表示有公共节点,没有则无

5.算法与程序设计题,有al[0,mid-1],al[mid,num-1]两个数组,这两个数组都是排序好的,将这两个数组merge成一个数据。
貌似可以一个新的数组,遍历一个数组,把节点在另外一个数组中比较,找到位置后将比较过的节点都存到新的数组中(也就是只遍历第一个数组,第二个数组不断变小)(需要先确认两个数组的排序方式:大到小或小到大)

6系统设计题,实现百度的suggestion功能。
要求,写出算法,所用数据结构,尽可能的减少时间空间复杂度,提出优化方法
用一组嵌套的map,随着字数的增加找到对应的map;找到值后排序(不懂top k)

读书人网 >C++

热点推荐