2015-05-10 2 views
4

мне дают якобы последовательный массив таким образом, как это:Найти недостающее число в целочисленном массиве

{4,5,7,8,9,10} // missing 6 

И я должен эффективно найти недостающую 6.

Я думал о делать бинарный поиск и проверка середины +1, середины -1.

Но я продолжаю думать, что будет так много базовых корпусов. Я держу неудачу ...

Это не должно быть такой трудной проблемой, но я не знаю, почему я борюсь так трудно:/

Может кто-то наставит меня через это ??

Большое спасибо ПЕРЦЫ

+0

Хотя вы уже получили несколько возможных ответов, я думаю, что стоит отметить, что если вы боретесь с одним подходом, вам необходимо перейти к выяснению другой. Бинарный поиск скорее всего не то, что они там ищут. Для решения этой проблемы есть много трюков, но самый простой способ понять (IMHO) включает в себя одиночный цикл. – thesentiment

+0

использовать двоичный поиск ... это лучшее, что вы можете сделать ... Первая глава в программировании Pearls .. – dharam

+1

Массив в этом вопросе _sorted_, а массив в ссылочном вопросе явно перетасован. Это позволяет быстрее, двоично-поисковое решение. –

ответ

1

В одном линейном проходе найти наименьший элемент, наибольший элемент, и сумма всех элементов.

Зная самое маленькое и самое большое, вы можете вычислить сумму всех чисел, если ничего не было (это сумма арифметической прогрессии). Вычитание из него фактической суммы даст вам недостающее число.

2

Всегда keep it simple приятель. Вы всегда можете сделать это в N временной сложности.

int[] arr = new int[]{4,5,7,8,9,10}; 
     int missing=0; 
     for(int i=0;i<arr.length;i++) 
     { 

      int x = arr[++i]; 
      int y = arr[i] +1; 

      if(x != y) 
      { 
       missing = y; 
       break; 
      } 
     } 

     System.out.println(missing); 
Смежные вопросы