@YukhaDav

Какими функциями заменить array_diff() в Си?

Реализовать функцию разности массивов, которая вычитает один массив из другого и возвращает результат.
Следует удалить все значения из списка a, которые есть в списке b, сохраняя их порядок.
Я знаю, что на других есть array_diff(), но как заменить его здесь?
  • Вопрос задан
  • 90 просмотров
Пригласить эксперта
Ответы на вопрос 1
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;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы