2010-11-05 60 views
1

我有两个有唯一值的排序数组(可以是ArrayLists,Collections或任何其他数据格式)。什么是比较它们的最快方法?目标是删除这两个列表中的所有值。最快的数组比较

开始:

int [] a = {1, 2, 3, 4, 5}; 
int [] b = {1, 2, 3, 6, 7}; 

末有:

a = {4, 5} 
b = {6, 7} 
+2

您可以轻松地为O比较(n)的最坏情况 – Andrey 2010-11-05 17:25:48

回答

9

使用合并步骤在MergeSort

  • 修改后的版本得到一个迭代器为每个阵列
  • 比较迭代器的值为
  • 如果相等,则递增两个
  • 如果不相等,把较小的值转换成唯一值的阵列,直到阵列的端部被满足
  • 如果在其他阵列中的任何左递增仅迭代
  • 重复,那些是唯一
1
List list = Arrays.asList(a); 

list.retainAll(b); //now list has {1, 2, 3} 

List result = Arrays.asList(a).removeAll(list); //it now has 4, 5. For b do the same 
+0

这可能是最短的代码,但它不可能是最有效的。 – jjnguy 2010-11-05 17:37:50

+0

分析器说... ;-) – 2010-11-05 19:01:32