44.腾讯面试题:
1.设计一个魔方(六面)的程序。
应该不是让求魔方的解法,求魔方解法也是有公式的,不同的情况按分支套公式就行。
依题意可能是让实现一个模拟魔方的程序。不讨论UI,只讨论魔方算法的实现。
六个3*3矩阵,各矩阵初值内部相同两两间互不相同,对应每个面。
魔方转动只有为两种:正对该面时顺时针转动或逆时针转动。
先声明各面排列,比如1对3、2对4、5对6。因为魔方的主要操作是对某面转动,所以为了尽量的快应该直接使用分支判断。写六个分支对应六个面,每面再写两个分支(顺时针转、逆时针转)。每种转动,自己和相邻面的矩阵数据如何交换。只对矩阵进行更新,再把更新后的矩阵返回到UI,即实现了魔方的转换。
2.有一千万条短信,有重复,以文本文件的形式保存,一行一条,有重复。
请用5分钟时间,找出重复出现最多的前10条。
遍历同时用哈希表计数,每更新一次哈希表计数,试着更新大小为10的小根堆,求数量最大的10条。
3.收藏了1万条url,现在给你一条url,如何找出相似的url。(面试官不解释何为相似)
什么叫相似?是指属于同一服务,还是指URL字串上大都相同呢?
先考虑前者,如果一个URL是另一个URL的前缀,是不是应该叫相似?或者两个URL的前面的目录相同,是不是也应该叫相似?所以可以先左对齐求前段地址和部分目录的字符串是否一致,如果一致则认为相似。
再考虑后者,如果不满足前面的结果。考虑相似是指匹配字符较多。那就用动态规划求字符对齐匹配数最大的。那么较多是多少呢?这个标准可以人为取,我想怎么也得80%以上才叫相似吧。那就人为规定了字符动态匹配数的标准了,达标的就认为是相似的。