腾讯面试题

一,设计一个魔方(六面)的程序。 P194

        思路:魔方总数9 + 9 + 8 = 26

                    魔方有六个面,需要定义六个结构体,内容为一个9个点和一个编号,其中每个点包含一个颜色标识;在魔方展开图中根据正方形的相邻关系编号,每个正方形都有四个函数:左翻、右翻、上翻、下翻

                    根据相邻关系,每个操作都会引起相邻面的相关操作

                                               比如一个面的左翻会调用右边相邻面的左翻;也就意味着左相邻面的0、1、2三个元素与当前面互换;递归下去,直到所有面都交换完毕;

 

  
二,有一千万条短信,有重复,以文本文件的形式保存,一行一条,有重复。请用5分钟时间,找出重复出现最多的前10条。

思路1:

假设平均短信长度为100BYTE,那么一千万条大小为:1000 0000 * 100 BYTE = 1000 000 KB = 1000M = 1 G.

如今的机器的内存很容易扩展,因此可以考虑采用hash方法.

先处理每条短信的得到hash值,然后将其读入map容器中。

        Map<hash值,个数>这样可以得到每条短信对应的重复个数。

        接下来用O(n)的时间就可以找到做多的前10

思路2

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

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


三,收藏了1万条url,现在给你一条url,如何找出相似的url。(面试官不解释何为相似)

 

        思考良久,觉得面试官的本意不是简单的考察最长匹配前缀问题。而是考察的动态规划问题中的经典算法问题“最长公共子序列”(算法导论15章,100题系列56题)

 

最复杂方法:O(nlogn)

       将该条插入,然后按照字符排序,则其上,或者其下一条最相似

改进:O(n)

      挨个比较,则得到最为相似的

再改进:用数据库的正则表达式

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页