首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

刚刚面试的算法题

2013-02-25 
刚面试的算法题。2个文件 每个文件有一些名字。找出2个文件中重复的名字。我想 吧2个文件都赌进内存 , 然后排

刚面试的算法题。
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来处理吧 好用又实惠

热点排行