2013百度校招笔试真题以及解析(二)

1、一个单词单词字母交换,可得另一个单词,如army->mary,成为兄弟单词。提供一个单词,在字典中找到它的兄弟。描述数据结构和查询过程。



思路1:使用hash_map和链表

(1)首先定义一个key,使得兄弟单词有相同的key,不是兄弟的单词有不同的key。例如,将单词按字母从小到大重新排序后作为其key,比如bad的key为abd,good的key为dgoo。
(2)使用链表将所有兄弟单词串在一起,hash_map的key为单词的key,value为链表的起始地址。
(3)开始时,先遍历字典,将每个单词都按照key加入到对应的链表当中。
(4)当需要找兄弟单词时,只需求取这个单词的key,然后到hash_map中找到对应的链表即可。

这样创建hash_map时时间复杂度为O(n),查找兄弟单词时时间复杂度是O(1)。

引用:原文链接

思路2:同样使用hash_map和链表

(1)将每一个字母对应一个质数,然后让对应的质数相乘,将得到的值进行hash,这样兄弟单词的值就是一样的了,并且不同单词的质数相乘积肯定不同。

注解: 根据数学定理:任何一个大于1的自然数N,都可以唯一分解成有限个质数的乘积 N=(P_1^a1)*(P_2^a2)……(P_n^an) , 这里P_1小于P_2小于…小于P_n是质数,且唯一。

例如 a=2 b=3 c=5 d=7 e=11… f(abcd)=2*3*5*7=210

然后字典里找乘积210的位数相同的一定是这5个字母组合的单词就是兄弟单词
(2)使用链表将所有兄弟单词串在一起,hash_map的key为单词的质数相乘积,value为链表的起始地址。
(3)对于用户输入的单词进行计算,然后查找hash,将链表遍历输出就得到所有兄弟单词。

这样创建hash_map时时间复杂度为O(n),查找兄弟单词时时间复杂度是O(1)。

引用:原文链接



2、一个url指向的页面里面有另一个url,最终有一个url指向之前出现过的url或空,这两种情形都定义为null。这样构成一个单链表。给两条这样单链表,判断里面是否存在同样的url。url以亿级计,资源不足以hash。



本题可以抽象为有环和无环情况下的链表交叉问题:

情况一:两条单链表均无环
  最简单的一种情况,由于两条链表如果交叉,他们的尾节点必然相等(Y字归并),所以只需要判断他们的尾节点是否相等即可。

情况二:两条单链表均有环
  这种情况只需要拆开一条环路(注意需要保存被设置成null的节点),然后判断另一个单链表是否仍然存在环路,如果存在,说明无交叉,反之,则有交叉的情况。

情况三:两条单链表,一条有环路,一条无环路
  这种情况显然他们是不可能有交叉的。



附:如何判断一条单链表是否存在环路,以及找出环路的入口

快慢指针:在表头设置两个指针fast与slow,fast指针与slow指针同时向前移动,但是fast每次移动2个节点,slow每次移动1个节点,若fast指向null或者fast==slow时停止,这时如果fast指向null,则说明没有环路,若fast==slow则说明有环路。

找环路入口:当fast==slow时,将fast重新指向表头。slow原地不动。然后fast和slow在同时以每次一个节点的速度向前移动,当他们再次重合时,就是环路入口。证明如下:

1.证明fast和slow肯定会重合
在slow和fast第一次相遇的时候,假定slow走了n步骤,环路的入口是在p步的时候经过的,那么有slow走的路径: p+c = n; c为p1和p2相交点,距离环路入口的距离;fast走的路径: p+c+k*L = 2*n; L为环路的周长,k是整数。显然,如果从p+c点开始,p1再走n步骤的话,还可以回到p+c这个点同时p2从头开始走的话,经过n步,也会达到p+c这点。

2.fast和slow在p+c点会重合,显然他们从环的入口点就开始重合。

转自http://iam42.iteye.com/blog/1680444

时间: 2024-10-15 04:54:23

2013百度校招笔试真题以及解析(二)的相关文章

2013百度校招笔试真题以及解析(内存管理及其优缺点总结)

简述Windows内存管理的几种方式以及优缺点. Windows内存管理方式如下图所示: 1.单一连续分配 所谓单一,是指内存中只驻留一道作业.为便于地址转换,把作业连续的存放在内存中,而不是离散的存放.单一连续区的管理思想主要用在早期的单道批处理系统中,采用静态分配的方式,即作业或进程一进入内存,就要等到它结束后才释放内存. 优点: 方法简单,易于实现 缺点: 仅适合于单道程序 2.分区管理 分区管理是把内存划分成若干个大小不等的区域,除操作系统占用一个区域之外,其余由多道环境下的各并发进程共

2015百度校招笔试真题以及解析(一)

1.为分析用户行为,系统常需存储用户的一些 query ,但因 query 非常多,故系统不能全存,设系统每天只存 m 个 query ,现设计一个算法,对用户请求的 query 进行随机选择 m 个,请给一个方案,使得每个 query 被抽中的概率相等,并分析之,注意:不到最后一刻,并不知用户的总请求量. 解析1:思路:如果用户查询的数量小于 m ,那么直接就存起来.如果用户查询的数量大于 m ,假设为 m+i ,那么在 1-–m+i 之间随机产生一个数,如果选择的是前面 m 条查询进行存取,

2015百度校招笔试真题以及解析(二)

1.static关键字,static全局变量与普通全局变量的区别,static局部变量与普通变量的区别,static函数与普通函数的区别. 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量.全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式. 这两者在存储方式上并无不同.这两者的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的. 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有

2014Microsoft 校招笔试真题(找工作的虾米们赶紧做题晒答案喽)

2013第四届蓝桥杯 C/C++本科A组 真题答案解析【交流帖】

今年的蓝桥杯又已经结束了,做的还是不怎么样,很多题目不难但就是算不出最终的结果,很是纠结,看来路还很长,另外昨天(2013-5-7)也受到了也受到了微软的thank you letter了,哎,都是苦逼的一天.不说了,直接看题吧,如果你对我的做法有异议或者有更好的解法,请给我留言,我会及时更新~~~~~ 1.高斯日记  大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯

2014百度研发真题及其解析-求比指定数大且最小的“不重复数”

题目: 给定一个正整数n,求比n大的第一个"不重复数"."不重复数"的定义:如果一个数,任何相邻两个数位上的数字都不相同,则称为不重复数.例如1234是不重复数,而1101不是. 思路一:暴力 数值加一,判断是否是重复数,如果是,继续加一判断,直到找到一个不是重复数的. #include <iostream> #include <cstring> #include <vector> #include <algorithm&g

京东2017校园招聘笔试真题(希尔排序)

对关键字{10,20,8,25,35,6,18,30,5,15,28}序列进行希尔排序,取增量d =5时,排序结果为( ) A. {6,18,8,5,15,10,20,30,25,35,28} B. {10,18,8,5,15,6,20,30,25,35,28} C. {10,20,8,5,15,6,18,30,25,35,28} D. {10,20,30,5,8,6,15,18,25,28,35} 希尔排序 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法

备战2016年软考必做真题!

网络规划设计师 2012年下半年网络规划设计师下午案例分析真题+答案解析:http://down.51cto.com/data/1405756 2013年网络规划设计师上午真题及答案解析:http://down.51cto.com/data/1861654 2014年下半年网络规划师下午1案例分析真题及答案:http://down.51cto.com/data/1906669 2015 年下半年网络规划师下午案例分析真题及答案:http://down.51cto.com/data/2117462

JAVA认证历年真题解析二(附答案)

问题描述 我在网上偶然看到一个网站,这个网站里面的资料非常全,除了一些免费的资料,还有网络视频,觉得非常不错,大家有兴趣或者需要,可以去看看[中华IT学习网]www.100itxx.com内容介绍>>本试卷共有45道题,每题后面都有详细解析.例:1.Whichofthefollowingrangeofshortiscorrect?A.-27--27-1B.0--216-1C.?215--215-1D.?231--231-1翻译下面哪些是short型的取值范围.答案 C解析 短整型的数据类型的长