Вычитание массивов

Какой самый быстрый способ реализовать вычитание массива? Например:

array a1 = [1, 3, 4, 5, 8];
array a2 = [2, 4, 5];

array a3 = a1 - a2; /* [1, 3, 8] */

Здесь массив будет типом, который моя программа использует для представления структуры, которая используется как контейнер. Остальное - это псевдокод, конечно, я не создаю такие массивы и не вычитаю.

Самым простым решением, которое я могу придумать, являются вложенные циклы:

/* a1 - a2 */
for (i = 0; i < a1.size; ++i) {
    int is_the_same = 0;
    for (j = 0; i < a2.size; ++j)
        if (a1[i] == a2[j]) {
            is_the_same = 1;
            break;
        }
    }
    if (!is_the_same)
       a3.push a1[i];
}

Но это не выглядит очень эффективным. Каким будет другой подход?

5
задан amit 18 February 2012 в 14:14
поделиться