2010-11-05 59 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