日期:2014-05-20  浏览次数:20638 次

刚面试的算法题。
2个文件 每个文件有一些名字。
找出2个文件中重复的名字。
我想 吧2个文件都赌进内存 , 然后排序。 然后比较。
后来又想这样复杂度和直接循环貌似差不多。  所以就直接说我不会了
有高人有好办法么。

------解决方案--------------------
没有顺序:用两层for循环,复杂度n×m
有顺序:先快速排序,再比较。
其实和你想的差不多
------解决方案--------------------
将两个文件的名字存到一个Map中,以名字做为key,判断Map,如果有这个名字的key,则这个名字则为重复.
如果自己写排序建议用归并排序,然后对中查找
------解决方案--------------------
很多时候用hash,就可以省略排序,hash检索key只需要O(1),
比如此题把第一个文件读入hashtable,(和你直接读入内存空间复杂度一样)
然后遍历第二个文件,用每一个文件名当key去第一个hash里查找,如果有就是重名文件
------解决方案--------------------
引用:
很多时候用hash,就可以省略排序,hash检索key只需要O(1),
比如此题把第一个文件读入hashtable,(和你直接读入内存空间复杂度一样)
然后遍历第二个文件,用每一个文件名当key去第一个hash里查找,如果有就是重名文件

这样的话就等于用O(n)空间换了O(n)的时间,本来O(n^2),现在只要O(n)
------解决方案--------------------
引用:
很多时候用hash,就可以省略排序,hash检索key只需要O(1),
比如此题把第一个文件读入hashtable,(和你直接读入内存空间复杂度一样)
然后遍历第二个文件,用每一个文件名当key去第一个hash里查找,如果有就是重名文件

嗯 用hashmap来处理吧 好用又实惠