以下我只叙述一下我所能想到的策略:
1.直接f1中一个记录一个记录的到f2中寻找,复杂度为o(mn)
2.可以将f2进行快速排序之后,再拿f1中一个记录一个记录的到f2中寻找,这个可以用折半查找,复杂度为o(nlgn+mlgn)
3.将f1,f2都进行快排之后,开始用一个i和一个j分别指向f1和f2,这样i和j都可以一直向后移动,不会出现i,j回退的现象,这样的复杂度为o(mlgm+nlgn+?)?表示我不太确定i,j所需要的时间,不过这个肯定相当快速。
4,由于都是数字,可以采用链式基数排序的方法,用十个桶对f1排序,用10个桶对f2进行排序,排序所需要的时间为o(d(m+d+n+d))(d=10),然后再进行3中所叙述的类似的方式,一直向后指
5,对f1构建小顶堆,f2构建小顶堆,时间复杂度为o(m+n),然后拿着堆顶元素对应着比较,删除堆顶这样的操作这个o(mlgm+nlgn)
6,用hash表,n进行散列,m去查找,应该是o(m+n)
我习惯c语言,没有用过java,不知道,我认为java应该都有对应的算法的,它的封装性太好了。
仅仅是个人的一些经验而已
温馨提示:答案为网友推荐,仅供参考