Самое быстрое сравнение массивов - PullRequest
1 голос
/ 05 ноября 2010

У меня есть два отсортированных массива (могут быть ArrayLists, Коллекции или любой другой формат данных) уникальных значений Какой самый быстрый способ сравнить их? Цель состоит в том, чтобы удалить все значения, присутствующие в обоих списках.

Начните с:

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

Конец:

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

Ответы [ 2 ]

9 голосов
/ 05 ноября 2010

Использовать измененную версию шага слияния в MergeSort

  • получить итератор для каждого массива
  • сравнить значения итераторов
  • если равно, увеличивать оба
  • если не равно, поместить меньшее значение в массив уникальных значений и увеличивать только этот итератор
  • повторяется до тех пор, пока не будет достигнут конец массива
  • если они есть в другом массиве, они уникальны
1 голос
/ 05 ноября 2010
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
...