Найти минимальный элемент, отсутствующий в последовательности неотрицательных целых чисел - PullRequest
1 голос
/ 20 сентября 2010

Мне нужно найти минимальный недостающий элемент из последовательности неотрицательных целых чисел.

Пример: у меня есть: 0 5 10 4 3 1

The missing element is 2.

В приведенной выше последовательности недостающими элементами являются 2 6 7 8 9. Минимум среди них 2, поэтому ответ 2.

Грубая сила. Я отсортирую последовательность и получу минимальный элемент в nlogn. Я ищу лучшее решение. Любая помощь?

Ответы [ 12 ]

0 голосов
/ 20 сентября 2010

Нет необходимости в сортировке.

  1. Перейдите по списку и найдите 2 самых маленьких значения, разница между которыми больше 1. (O (N))

  2. Распечатать (найдено наименьшее значение) + 1.

0 голосов
/ 20 сентября 2010

псевдокод:

for(int i = 0 ; i < Int.MAX ; i++)
{
   if(i is not in list)
   {
       return i
    }
}

Конечно, возможно, это можно оптимизировать, но в качестве первоначального черновика, чтобы сдать ваши тесты (у вас есть тесты, верно), это очень простое решение, которое даст вам уверенность в том, что ваши тесты правильно, освобождая вас для оптимизации при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...