Если учесть числа в диапазоне от 1 до N; половина из них больше чем N / 2 и половина из них меньше чем N / 2
Если значение больше N / 2, MSB будет установлен в единицу;
MSB = 0 для меньших.
Разбейте весь набор на основе MSB, который даст вам два набора: набор чисел, меньший, чем N / 2, и набор чисел, больший, чем N / 2
Раздел меньшего размера содержит отсутствующий элемент.
На следующем шаге используйте следующий MSB.
Если меньший набор был меньше N / 2, половина из них меньше N / 4 (2-й MSB = 0), а другая половина больше, чем N / 4 (2-й MSB = 1)
Если меньший набор был больше, чем N / 2, половина из них меньше, чем N / 2 + N / 4 (2-й MSB = 0), а другая половина больше, чем N / 2 + N / 4 ( 2-й разряд MSB = 1)
Каждый раунд будет вдвое уменьшать пространство поиска, и все.
Sum ( N / 2^i ) for 0 <= i < log N gives you O(N)