Задать вопрос
  • Какими функциями заменить array_diff() в Си?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Руками. Если лень писать свою хеш таблицу, то можно и совсем в тупую. Итерируйтесь по списку a. Внутри итерируйтесь по списку b и, если нашли там элемент, то удаляйте из a. Иначе переходите к следующему элементу.

    Более продвинутый вариант - отсортировать список b и искать там каждый элемент из a бинарным поиском.

    Удобный трюк для удаления элементов из массива - хранить индекс первого не занятого элемента. Тогда получается что-то вроде этого:
    int empty_pos = 0;
    for (int i = 0; i < n; ++i) {
      if (!ShouldDelete(a[i], b)) {
        a[empty_pos++] = a[i];
      }
    }
    n = empty_pos;
    Ответ написан
    3 комментария