您的位置:首页 > 职场人生

微软100题(44)几道腾讯面试题

2015-05-31 10:33 399 查看
题目:
1.设计一个魔方(六面)的程序。
2.有一千万条短信,有重复,以文本文件的形式保存,一行一条,有重复。
请用5分钟时间,找出重复出现最多的前10条。
3.收藏了1万条url,现在给你一条url,如何找出相似的url

1、
参见http://blog.csdn.net/showman/article/details/8996

其它人的解答:lijiaz5033
先说面,每面有四边,因此要建立4个句柄对应:上下左右,四个去面,就像双向链表节点有上下两面一样, 然后面里有方块矩阵,2级的数组,加完数组写个方法函数,叫旋转,参数是行列号/旋向 , 旋向上下时行列号为行号,旋向左右时行列号为列号,意思是把某行某列往某方向旋转。 矩阵里有方块,方块有 创建六个面,按照魔方的样子,将第一面为正面,往下是底面(把第二面拿过来), 底面往下是背面,背面往下联就是上面,上面往下是正面,现在回到正面,正面往左联就是左面,
左面往左联就是后面,后面往左就是右面,右面往左是正面。。。。。。(这里不用罗索了,自己看明白了就知道怎么做了) 六个面创建完并上下左右连通后,这个程序就完成了

其它:http://blog.csdn.net/lzc52151/article/details/6221852
应该不是让求魔方的解法,求魔方解法也是有公式的,不同的情况按分支套公式就行。
依题意可能是让实现一个模拟魔方的程序。不讨论UI,只讨论魔方算法的实现。
六个3*3矩阵,各矩阵初值内部相同两两间互不相同,对应每个面。
魔方转动只有为两种:正对该面时顺时针转动或逆时针转动。
先声明各面排列,比如1对3、2对4、5对6。因为魔方的主要操作是对某面转动,所以为了尽量的快应该直接使用分支判断。写六个分支对应六个面,每面再写两个分支(顺时针转、逆时针转)。每种转动,自己和相邻面的矩阵数据如何交换。只对矩阵进行更新,再把更新后的矩阵返回到UI,即实现了魔方的转换。

2、
方法一:
1.短信长度是有限的,例如在中国短信长度范围为0-140字节,

2.题目中没有提到内存限制,假设内存是足够的(本题按下面算法最坏情况下需要1个多G)

2.建立140个元素的multimap数组(空短信可另行特殊处理),

下标为i的multimap与长度为i的字符串相对应。键为字符串的hash,值为字符串及其出现次数.

3.遍历短信,将短信根据长度进行处理,怎么处理我就不细说了

4.对每一个multimap,按字符串的出现次数,找出前10个字符串(也可能不足10个),

(可以用堆排序,复杂度为O(n*logn))

5.在4找出的所有字符串组成的集合中,按字符串的出现次数,找出出现最多的前10个

方法二:
建立一个红黑树a;

遍历短信,对每条短信取MD5值,对每个MD5值在a中做操作:如果有值,这个key对应的值就+1,否则就=1;

遍历完后对红黑树取值最大的10个数,复杂度为10lg n

方法三:
首先我们将文本导入数据库,使用Having子句来实现这样的功能,我们利用如下语句
select count(*) ccount

from table
group by messageString having count(*)>1
order by ccount desc
这样得到的第一个记录就是出现重复次数最多的那组数字。

3、
方法一:利用正则表达式
方法二:
什么叫相似?是指属于同一服务,还是指URL字串上大都相同呢?
先考虑前者,如果一个URL是另一个URL的前缀,是不是应该叫相似?或者两个URL的前面的目录相同,是不是也应该叫相似?所以可以先左对齐求前段地址和部分目录的字符串是否一致,如果一致则认为相似。
再考虑后者,如果不满足前面的结果。考虑相似是指匹配字符较多。那就用动态规划求字符对齐匹配数最大的。那么较多是多少呢?这个标准可以人为取,我想怎么也得80%以上才叫相似吧。那就人为规定了字符动态匹配数的标准了,达标的就认为是相似的

转化为:求最长公共子序列的题目
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: