Re: поиск недостающих чисел
От: Кодт Россия  
Дата: 28.08.08 19:38
Оценка: 7 (2)
Здравствуйте, free.rFczZZ, Вы писали:

FR>есть массив из N целых чисел от 0 до N. Каждое число из массива повторяется в нем 1 раз, кроме 0 (нуля) — он может встретиться сколько угодно раз. Задача — найти недостающие числа массива (в диапазоне от 1 до N) вместо которых стоит 0. Использовать в качестве вспомогательных только простые целочисленные переменные. Скорость роста алгоритма O(N) = N


Если массив можно разрушать, то всё очень просто.
Выполняем дефрагментацию, а потом пробегаем и смотрим, где нули.
int arr[N];

for(int i=1; i<=N; ++i)
{
  int& here = arr[i-1];
  while(here != 0 && here != i)
    swap(here, arr[here-1]);
    // после этой операции текущий элемент оказывается на своём месте
    // поэтому число элементов, стоящих не на своём месте, убывает;
}

for(int i=1; i<=N; ++i)
{
  int const& here = arr[i-1];
  if(here == 0)
    cout << "отсутствует число " << i << endl;
}
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.